Apakah ada di linux bash sesuatu yang mirip dengan kode berikut di PHP:
list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;
yaitu Anda menetapkan dalam satu kalimat nilai yang sesuai untuk 3 variabel berbeda.
Katakanlah saya memiliki fungsi bash myBashFuntion
yang menulis ke stdout string "qwert asdfg zxcvb". Apakah mungkin melakukan sesuatu seperti:
(var1 var2 var3) = ( `myBashFuntion param1 param2` )
Bagian di sebelah kiri tanda sama dengan bukan sintaks yang valid tentunya. Saya hanya mencoba menjelaskan apa yang saya minta.
Namun, apa yang berhasil adalah sebagai berikut:
array = ( `myBashFuntion param1 param2` )
echo ${array[0]} ${array[1]} ${array[2]}
Tapi array yang diindeks tidak sejelas nama variabel biasa.
Namun, saya hanya bisa melakukan:
var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}
Tetapi itu adalah 3 pernyataan lagi yang lebih suka saya hindari.
Saya hanya mencari sintaks pintasan. Apa itu mungkin?
sumber
read -d "\n" v1 v2 <<<$(cmd)
bekerja dengan sempurna. Terima kasih!echo
tidak ada gunanya, tetapi saya menggunakan teknik ini untuk mengembalikan beberapa nilai dari skrip yang saya pedulikan tentang status pengembalian. Saya pikir saya akan membagikan temuan saya.read -r
::do not allow backslashes to escape any characters
Saya ingin menetapkan nilai ke array. Jadi, memperluas pendekatan Michael Krelin , saya melakukan:
yang menghasilkan:
seperti yang diharapkan.
sumber
a=( $(echo 2 4 6) ) ; echo ${a[0]} ${a[1]} ${a[2]}
read -r
::do not allow backslashes to escape any characters
Saya pikir ini mungkin membantu ...
Untuk memecah tanggal yang dimasukkan pengguna (hh / bb / tttt) di skrip saya, saya menyimpan hari, bulan, dan tahun ke dalam array, dan kemudian memasukkan nilainya ke dalam variabel terpisah sebagai berikut:
sumber
IFS=/ read -r m d y < <(echo 12/29/2009)
Terkadang Anda harus melakukan sesuatu yang funky. Katakanlah Anda ingin membaca dari sebuah perintah (contoh tanggal oleh SDGuero misalnya) tetapi Anda ingin menghindari banyak percabangan.
Anda juga bisa menyalurkan ke perintah read, tetapi kemudian Anda harus menggunakan variabel dalam subkulit:
menghasilkan ...
sumber
read
perintah tidak terjadi di subkulit karena kawat gigi, itu karena Anda punya perintah membaca di sisi kanan pipa. Anda perlu menjalankanread
perintah di shell saat ini, yang dapat Anda lakukan sepertiread day month year <<< `date "+%d %m %Y"`
read
terjadi tetapi cakupan variabel yang dibaca berada di luar cakupan saat subkulit pipeline berakhir.Bab 5 dari Bash Cookbook oleh O'Reilly, membahas (secara panjang lebar) alasan persyaratan dalam tugas variabel bahwa tidak ada spasi di sekitar tanda '='
Penjelasannya ada hubungannya dengan membedakan antara nama perintah dan variabel (di mana '=' mungkin argumen yang valid).
Ini semua tampaknya sedikit seperti membenarkan setelah kejadian, tetapi dalam kasus apa pun tidak ada penyebutan metode untuk menetapkan daftar variabel.
sumber
;
' adalah argumen yang valid? Ketika saya menulisls ; cd
itu masih panggilanls
dancd
meskipun ada spasi. Jika saya ingin membuat daftar direktori yang dipanggil;
dancd
saya bisa mengetikls ';' cd
.