Saya ingin mengembalikan nilai dari fungsi yang disebut dalam skrip shell. Mungkin saya kehilangan sintaks. Saya mencoba menggunakan variabel global. Tapi itu juga tidak berhasil. Kodenya adalah:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
shell
return-value
Mridul Vishal
sumber
sumber
Jawaban:
Fungsi Bash tidak dapat mengembalikan string secara langsung seperti yang Anda inginkan. Anda dapat melakukan tiga hal:
Ini juga berlaku untuk beberapa cangkang lainnya.
Berikut cara melakukan masing-masing opsi tersebut:
1. Senar gema
2. Kembali status keluar
3. Bagikan variabel
sumber
function
kata kunci untuk mendefinisikan fungsi bash. Itu akan membuatnya kurang portabel. Menghapusnya.Anda bekerja terlalu keras. Seluruh skrip Anda harus:
tapi bahkan itu mungkin terlalu bertele-tele. Saya akan mengkodekannya:
tetapi pesan kesalahan yang dihasilkan agak tidak jelas.
sumber
mkdir "$lockdir" || { echo "could not create lock dir" >&2 ; exit 1 ; }
(perhatikan;
sebelum kurung kurawal tutup). Juga, saya sering mendefinisikan fungsi gagal yang mengambil parameter pesan opsional yang dicetak ke stderr dan kemudian keluar dengan kode pengembalian 1, memungkinkan saya untuk menggunakan yang lebih mudah dibacamkdir "$lockdir" || fail "could not create lock dir"
.cmd || fail "error msg" || return 1
jika Anda ingin melakukan itu, bukan?fail
fungsi seperti itu hanya digunakan untuk situasi fatal.Jika itu hanya tes benar / salah, miliki fungsi Anda
return 0
untuk sukses, danreturn 1
untuk kegagalan. Tesnya kemudian adalah:sumber
Saya pikir mengembalikan 0 untuk succ / 1 untuk gagal (glenn jackman) dan jawaban olibre yang jelas dan jelas mengatakan semuanya; hanya untuk menyebutkan semacam pendekatan "kombo" untuk kasus di mana hasilnya bukan biner dan Anda lebih suka menyetel variabel daripada "menggemakan" hasil (misalnya jika fungsi Anda JUGA misalkan menggemakan sesuatu, pendekatan ini akan tidak bekerja). Lalu bagaimana? (di bawah ini adalah Bourne Shell)
seperti di (ya, contohnya agak konyol, itu hanya .. contoh)
sumber
Jika Anda memiliki beberapa parameter untuk diteruskan ke suatu fungsi dan menginginkan nilai sebagai gantinya. Di sini saya meneruskan "12345" sebagai argumen ke suatu fungsi dan setelah memproses mengembalikan variabel XYZ yang akan ditetapkan ke VALUE
Keluaran:
sumber