Linux: đặt lệnh cho các biến cục bộ


9

Tôi đang cố gắng để hiểu các biến cục bộ / môi trường và các lệnh export / set.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Vui lòng giải thích tại sao echo $FILEMtrả về chuỗi rỗng

Câu trả lời:


21

Bạn đang bối rối bashvới csh.

Trong bashgiống như trong bất kỳ Bourne giống như vỏ, setlà lệnh để thiết lập tùy chọn (thiết lập cấu hình vỏ thích -f, -C, -o noclobber...) và các thông số vị trí ( $1, $2...).

set FILEM="razrax"

Đặt $1thành FILEM=razrax.

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

Cú pháp gán biến trong các shell giống Bourne là:

VAR=value

(không có không gian cho phép ở hai bên =).

kshvà một số shell giống Bourne khác (mksh, pdksh, zsh) cũng có thể gán các biến mảng với set:

set -A array value1 value2

zsh, bash, yashVà các phiên bản mới hơn của kshsử dụng cú pháp này để thay thế:

array=(value1 value2)

Ngược lại, trong cshhoặc tcsh, cú pháp là:

set VAR = value
set array = (value1 value2)

(không gian xung quanh =tùy chọn).

Trong rc/ esvỏ:

VAR = value
array = (value1 value2)

(không gian xung quanh =tùy chọn).


Cảm ơn bạn đã trả lời tốt đẹp. Điều duy nhất tôi không hiểu là những gì các tùy chọn benweet khác nhau và các biến cục bộ "set là lệnh để đặt tùy chọn"?
iJava

@iJava, set -Cđặt -Ctùy chọn (giống như set -o noclobber). set foogán foocho $1(và $#là 1, ( $2, $3không được đặt nếu được đặt trước đó)). Kiểm tra hướng dẫn sử dụng vỏ của bạn để biết chi tiết.
Stéphane Chazelas

1
Tôi không hiểu lựa chọn là gì. Các tùy chọn này có được gửi đến các chương trình như main (String [] args) không? Hay cái gì? Chúng được sử dụng ở đâu?
iJava

1
@iJava, chúng là các cài đặt ảnh hưởng đến hành vi của shell. Một lần nữa, RTFM
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.