Linux: mengatur perintah untuk variabel lokal

9

Saya mencoba memahami variabel lokal / lingkungan dan mengekspor / mengatur perintah.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Tolong jelaskan mengapa echo $FILEMmengembalikan string kosong

iJava
sumber

Jawaban:

21

Anda bingung bashdengan csh.

Dalam bashseperti di Bourne-seperti shell, setadalah perintah untuk set pilihan (pengaturan konfigurasi shell seperti -f, -C, -o noclobber...) dan parameter posisi ( $1, $2...).

set FILEM="razrax"

Setel $1ke FILEM=razrax.

$ set FILEM="razrax"
$ echo "$1"
FILEM=razrax

Sintaks untuk tugas variabel dalam cangkang mirip Bourne adalah:

VAR=value

(tidak ada ruang yang diizinkan di kedua sisi =).

kshdan beberapa shell mirip Bourne lainnya (mksh, pdksh, zsh) juga dapat menetapkan variabel array dengan set:

set -A array value1 value2

zsh, bash, yashDan versi yang lebih baru dari kshpenggunaan sintaks ini sebagai gantinya:

array=(value1 value2)

Sebaliknya, dalam cshatau tcsh, sintaksnya adalah:

set VAR = value
set array = (value1 value2)

(spasi di sekitar =opsional).

Dalam rc/ eskerang:

VAR = value
array = (value1 value2)

(spasi di sekitar =opsional).

Stéphane Chazelas
sumber
Terima kasih atas jawaban yang bagus. Satu-satunya hal yang saya tidak mengerti adalah apa perbedaan opsi benweet dan variabel lokal "set adalah perintah untuk mengatur opsi"?
iJava
@ iJava, set -Csetel -Copsi (sama dengan set -o noclobber). set fooditugaskan fooke $1(dan $#1, ( $2, $3tidak disetel jika sebelumnya ditetapkan)). Periksa manual shell Anda untuk detailnya.
Stéphane Chazelas
1
Saya tidak mengerti opsi APA. Apakah opsi ini yang dikirimkan ke program seperti main (String [] args)? Atau apa? Di mana mereka digunakan?
iJava
1
@ iJava, mereka adalah pengaturan yang mempengaruhi perilaku shell. Lagi, RTFM
Stéphane Chazelas