Lebih
Bagaimana cara mengatur sebuah variabel output dari perintah di Bash?
Saya punya script sederhana itu adalah sesuatu seperti berikut:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Ketika saya menjalankan script ini dari baris perintah dan lulus argumen, saya tidak mendapatkan output. Namun, ketika saya menjalankan perintah-perintah yang terkandung dalam $MOREF
variabel, saya mampu untuk mendapatkan output.
Bagaimana seseorang bisa mengambil hasil dari perintah yang harus dijalankan dalam script, simpan ke sebuah variabel, dan kemudian output yang variabel pada layar?
1497
14
Selain backticks
`command`
anda dapat menggunakan$(perintah)
atau"$(perintah)"
yang saya menemukan lebih mudah untuk membaca, dan memungkinkan untuk bersarang.Mengutip (
"
) tidak peduli untuk melestarikan multi-line-nilai.Cara yang tepat adalah
Jika anda're akan menggunakan apostrof, anda perlu
`
, bukan'
. Karakter ini disebut "backticks" (atau "makam aksen").Seperti ini:
Karena mereka telah menunjukkan kepada anda, anda harus menggunakan 'backticks'.
Alternatif yang diusulkan
$(perintah)
bekerja dengan baik, dan juga lebih mudah untuk dibaca, tetapi perhatikan bahwa ini hanya berlaku dengan Bash atau KornShell (dan kerang yang berasal dari orang-orang), jadi jika script anda harus benar-benar portabel pada berbagai sistem Unix, anda harus lebih tua backticks notasi.Beberapa [tag:bash] trik-trik yang saya gunakan untuk mengatur variabel-variabel dari perintah
2nd Edit 2018-02-12: Menambahkan cara yang berbeda, pencarian di bawah ini untuk lama-menjalankan tugas-tugas!
2018-01-25 Edit: tambahkan contoh fungsi (untuk mengisi vars tentang penggunaan disk)
Pertama lama yang sederhana dan cara yang kompatibel
Sebagian besar kompatibel, cara kedua
Seperti yang bersarang bisa menjadi berat, kurung dilaksanakan selama ini
Saya tahu tiga cara untuk melakukan:
1) Fungsi cocok untuk tugas-tugas seperti:
Memohon dengan mengatakan
func
2) Juga cocok bisa menjadi solusi eval:
3) Yang ketiga adalah dengan menggunakan variabel-variabel yang secara langsung:
anda bisa mendapatkan output dari ketiga solusi dengan cara yang baik:
dan juga dalam cara jahat:
Hanya untuk menjadi berbeda:
Ketika pengaturan variabel pastikan anda memiliki TANPA Spasi sebelum dan/atau setelah = tanda. Benar-benar menghabiskan waktu satu jam mencoba untuk mencari ini, mencoba segala macam solusi! Ini Tidak keren.
Yang benar:
Akan Gagal dengan kesalahan: (hal-hal: tidak ditemukan atau serupa)
Jika anda ingin melakukannya dengan multiline/beberapa perintah/s maka anda dapat melakukan ini:
Anda perlu menggunakan salah
$(perintah berikut)
atau
contoh
Anda dapat menggunakan kembali-kutu(juga dikenal sebagai aksen kuburan) atau
$()
. Seperti-Keduanya memiliki efek yang sama. Tapi OUTPUT=$(x+2) lebih mudah dibaca dan yang terbaru.
Ini adalah cara lain, baik untuk digunakan dengan beberapa teks editor yang tidak benar menyoroti setiap rumit kode yang anda buat.
Beberapa mungkin menemukan ini berguna. Nilai-nilai Integer ke dalam variabel substitusi, dimana trik ini adalah menggunakan
$(())
kurung ganda:Berikut ini adalah dua cara:
Harap diingat bahwa ruang merupakan hal yang sangat penting dalam [tag:bash]. Jadi, jika anda ingin perintah anda untuk berjalan, gunakan seperti tanpa memperkenalkan lebih banyak ruang.
L=$"harshil" echo "$L"
tr
untuk L2.tr
sedang dioperasikan pada variabel lain L1.L2=$(echo "$L1" | tr [:upper:] [:lower:])
Jika perintah yang anda mencoba untuk mengeksekusi gagal, itu akan menulis output ke kesalahan stream dan kemudian akan dicetak ke konsol. Untuk menghindari hal itu, anda harus mengarahkan kesalahan stream