GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Mengatur Variabel Sebelum Perintah Legal Di Bash?

Saya baru saja menemukan beberapa jawaban seperti menguraikan file teks yang dibatasi… yang menggunakan konstruksi:

while IFS=, read xx yy zz;do
    echo $xx $yy $zz
done < input_file

di mana IFS variabel diatur sebelum read perintah.

Saya telah membaca referensi bash tetapi tidak tahu mengapa ini legal.

Saya mencoba

$ x="once upon" y="a time" echo $x $y

dari bash command Prompt tetapi tidak ada yang bergema. Dapatkah seseorang mengarahkan saya ke tempat sintaks itu didefinisikan dalam referensi yang memungkinkan variabel IFS diatur dengan cara itu? Apakah ini kasus khusus atau dapatkah saya melakukan hal serupa dengan variabel lain?

Jawaban yang Diterima:

Informasi yang relevan dapat ditemukan di halaman manual yang disediakan oleh pengelola BASH (terakhir diperiksa Agustus 2020). Bagian Tata Bahasa Shell, Perintah Sederhana menyatakan (penekanan ditambahkan):

Perintah sederhana adalah urutan penetapan variabel opsional diikuti dengan kata dan pengalihan yang dipisahkan kosong , dan diakhiri oleh operator kontrol. Kata pertama menentukan perintah yang akan dieksekusi, dan diteruskan sebagai argumen nol. Kata-kata yang tersisa dilewatkan sebagai argumen untuk perintah yang dipanggil.

Jadi Anda dapat meneruskan variabel apa pun yang Anda inginkan. echo . Anda contoh tidak berfungsi karena variabel diteruskan ke perintah, tidak disetel di Shell. Shell memperluas $x dan $y sebelum memanggil perintah. Ini berfungsi, misalnya:

$ x="once upon" y="a time" bash -c 'echo $x $y'
once upon a time

Linux
  1. Alias ​​​​dengan variabel di bash

  2. perintah ekspor bash

  3. Mengarahkan output perintah ke variabel di bash gagal

  1. Skrip bash(I)

  2. Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

  3. Mengapa menggunakan gema sebelum menginstal perangkat lunak baru?

  1. Keluar dari kode penugasan variabel ke substitusi perintah di Bash

  2. Jalankan perintah bash pada pipa jenkins

  3. Redirect output dari perintah waktu di unix ke dalam variabel di bash?