GNU/Linux >> Belajar Linux >  >> Linux

Sintaks Shell/bash ini:Somevariable=somevalue Somecommand?

Pertanyaan ini sudah memiliki jawaban di sini :Apakah shell portabel untuk menjalankan perintah pada baris yang sama setelah penetapan variabel?

(4 jawaban)
Tutup 2 tahun lalu.

Salah satu rekan kerja saya telah memberi saya sintaks Bash yang tidak saya kenal. Google foo saya gagal dalam mencari tahu apa fungsinya dan mengapa/kapan saya harus menggunakannya.

Perintah yang dia kirimkan kepada saya adalah dalam bentuk ini:

someVariable=something 
command

Awalnya, saya pikir ini setara dengan yang berikut:

someVariable=something ; command

Atau

someVariable=something 
command

Tapi ini tampaknya tidak terjadi. Contoh:

[Jan-03 11:26][~]$ # Look at the environment variable BAZ. It is currently empty
[Jan-03 11:26][~]$ echo $BAZ

[Jan-03 11:27][~]$ # Try running a command of the same format    
[Jan-03 11:27][~]$ BAZ=jake echo $BAZ

[Jan-03 11:27][~]$    
[Jan-03 11:27][~]$ # Now, echo BAZ again. It is still empty:    
[Jan-03 11:27][~]$ echo $BAZ

[Jan-03 11:27][~]$    
[Jan-03 11:28][~]$    
[Jan-03 11:28][~]$ # If we add a semi-colon to the command, we get dramatically different results:
[Jan-03 11:28][~]$ BAZ=jake ; echo $BAZ
jake
[Jan-03 11:28][~]$
[Jan-03 11:28][~]$ # And we can see that the variable is actually set:
[Jan-03 11:29][~]$ echo $BAZ
jake
[Jan-03 11:29][~]$

Apa yang dilakukan sintaks ini? Apa yang terjadi pada variabel yang telah ditetapkan? Mengapa ini berhasil?

Jawaban yang Diterima:

Ini setara dengan:

( export someVariable=something; command )

Ini membuat someVariable variabel lingkungan, dengan nilai yang ditetapkan, tetapi hanya untuk perintah yang dijalankan.

Berikut adalah bagian yang relevan dari bash panduan:

Perintah Sederhana

Perintah sederhana adalah urutan penugasan variabel opsional diikuti oleh kata-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.

(…)

Ekspansi Perintah Sederhana

Jika tidak ada nama perintah yang dihasilkan [dari ekspansi perintah], penetapan variabel memengaruhi lingkungan shell saat ini. Jika tidak, variabel ditambahkan ke lingkungan perintah yang dijalankan dan tidak memengaruhi lingkungan shell saat ini .

Catatan:ingatlah bahwa ini tidak khusus untuk bash , tetapi ditentukan oleh POSIX.

Terkait:Debian – Mengapa bagian CIFS menampilkan file yang sama beberapa kali?

Edit – Rangkuman diskusi dari komentar di jawaban

Alasan BAZ=JAKE echo $BAZ , tidak mencetak JAKE karena substitusi variabel dilakukan sebelum hal lain. Jika Anda mengabaikan substitusi variabel, ini akan berperilaku seperti yang diharapkan:

$ echo_baz() { echo "[$BAZ]"; }
$ BAZ=Jake echo_baz
[Jake]
$ echo_baz
[]

Linux
  1. Memahami Variabel di Bash Shell Di Linux

  2. perintah ekspor bash

  3. Apa arti sintaks |&dalam bahasa shell?

  1. Apa arti dari `! -d` dalam perintah Bash ini?

  2. Apa perbedaan antara &> dan >&di bash?

  3. Bagaimana cara menemukan bantuan untuk perintah titik `.` di * nix?

  1. Cara memprogram dengan Bash:Sintaks dan alat

  2. Menyesuaikan Bash Shell:Tebal/warnai Perintah?

  3. Tutorial Status Keluar Bash Shell dengan Contoh Praktis