Tetapkan nilai atau string ke variabel dalam skrip linux
1
Saya mencoba untuk menetapkan output dari basenameperintah file ke variabel "nama file". pathsadalah file yang berisi lokasi jalur, mis/root/home/david/mynote
$FILEadalah = mynote. grepadalah untuk mendapatkan path lengkap /root/home/david/mynotedan
basenamehanya mengekstraksi mynotedan menetapkannya ke variabel filename.
filename=basename `grep $FILE House/paths`
Dengan baris perintah di atas, nilai filenameselalu kosong ketika saya masukkan
echo $filename.
Perintah ini membaca setiap baris file foo.txtdan menyimpan isinya ke dalam variabel $FILE. Kemudian dieksekusi {something}sekali untuk setiap baris file.
Dalam hal ini, {something}apakah perintah ini:
filename=`basename "$FILE"`; echo "$filename"
Itu satu berjalan basenamepada isi variabel $FILEdan menyimpan hasilnya dalam variabel $filename. Perhatikan tanda kutip ( ") di sekitar $FILE, mereka memastikan bahwa perintah bekerja untuk nama file yang berisi spasi. Akhirnya digunakan echountuk mencetak isi $filename.
MEMPERBARUI:
Setelah melihat pertanyaan Anda yang lain , saya mengerti apa yang Anda coba lakukan. Yang Anda butuhkan adalah ini:
Alasan variabel kosong adalah ini: ketika shell melihat
filename=basename `grep $FILE House/paths`
shell pertama-tama mengeksekusi perintah grep (misalkan untuk ilustrasi, perintah mengembalikan "/ foo / bar / myfile")
shell kemudian mencoba mengeksekusi "/ foo / bar / myfile", untuk sementara mengatur variabel lingkungan filenamedengan nilai baselineuntuk durasi perintah itu - shell tidak mengandung filenamevariabel.
Ini diam-diam didokumentasikan dalam referensi bash di bawah Lingkungan
Lingkungan untuk setiap perintah atau fungsi sederhana dapat ditambah sementara dengan mengawalinya dengan penetapan parameter, seperti yang dijelaskan dalam Parameter Shell . Pernyataan penugasan ini hanya memengaruhi lingkungan yang dilihat oleh perintah itu.
Ini adalah contoh sempurna mengapa Anda harus berhenti menggunakan sintaks backtick yang
sudah usangdi bash:Lihat http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution
Catatan, untuk melindungi dari jalur yang mungkin mengandung spasi, sertakan beberapa item dalam tanda kutip ganda:
Alasan variabel kosong adalah ini: ketika shell melihat
filename
dengan nilaibaseline
untuk durasi perintah itu - shell tidak mengandungfilename
variabel.Ini diam-diam didokumentasikan dalam referensi bash di bawah Lingkungan
sumber