Bila Anda menggunakan LANG=C gcc ...
apa yang terjadi adalah bahwa shell menetapkan LANG untuk gcc
lingkungan 's hanya , dan tidak untuk saat ini lingkungan itu sendiri ( lihat catatan ). Jadi setelah gcc
selesai, LANG
kembali ke nilai sebelumnya (atau tidak disetel).
Selain itu, ketika Anda menggunakannya A=10 echo $A
adalah shell yang menggantikan $ A, bukan echo, dan substitusi ini (disebut "ekspansi") terjadi sebelum pernyataan dievaluasi (termasuk penugasan), sehingga untuk bekerja sesuai A
dengan nilai yang diharapkan , nilai harus sudah ditetapkan. di lingkungan saat ini sebelum pernyataan itu.
Itu sebabnya A=10 echo $A
tidak berfungsi seperti yang diharapkan: A=10
akan ditetapkan untuk gema, tetapi gema secara internal mengabaikan nilai variabel lingkungan A
. Dan $A
diganti dengan nilai yang ditetapkan di shell saat ini (yang tidak ada), dan kemudian diteruskan sebagai argumen untuk echo.
Jadi asumsi Anda benar: VAR=value command
tidak berfungsi, tetapi ini hanya relevan jika secara command
internal menggunakan VAR. Jika tidak, Anda masih dapat melewati value
sebagai argumen untuk command
, tetapi argumen digantikan oleh arus shell, sehingga mereka harus ditetapkan sebelum penggunaan:VAR=value; command "$VAR"
Jika Anda tahu cara membuat skrip yang dapat dieksekusi, Anda dapat mencoba ini sebagai ujian:
#!/bin/sh
echo "1st argument is $1"
echo "A is $A"
Simpan sebagai testscript
dan coba:
$ A=5; A=10 testscript "$A"; echo "$A"
1st argument is 5
A is 10
5
Terakhir namun tidak kalah pentingnya, ada baiknya mengetahui perbedaan antara variabel shell dan lingkungan dan argumen program .
Berikut ini beberapa referensi bagus:
.
(*) Catatan: teknis shell tidak diatur dalam lingkungan saat ini juga, dan inilah sebabnya: Beberapa perintah, seperti echo
, read
dan test
yang builtin shell , dan dengan demikian mereka tidak menelurkan sebuah proses anak. Mereka berjalan di lingkungan saat ini. Tetapi shell menangani tugas hanya berlangsung sampai perintah berjalan, jadi untuk semua tujuan praktis efeknya sama: tugas hanya dilihat oleh perintah tunggal.
A=10 (echo $A)
dan dapatkan10
?