Apa perbedaan antara penugasan variabel di bawah ini?
var=23
var =23
var= 23
var = 23
Apakah ada perbedaan ruang di sekitar operator penugasan?
shell
variable
assignment
ajay
sumber
sumber
var
makavar =23
akan lulus=23
ke var, danvar = 23
akan lulus=
dan23
ke var. Atau, jika Anda memiliki perintah yang dipanggilvar=
makavar= 23
akan lolos23
ke perintahvar=
.bash
, yang melakukan hal yang persis sama sepertish
dalam keempat kasus.Jawaban:
Itu sangat tergantung pada shell. Jika kita hanya melihat 4 famili shell utama (Bourne, csh, rc, fish):
Keluarga Bourne
Itu adalah Bourne shell dan semua variannya dan
ksh
,bash
,ash
/dash
,zsh
,yash
.var=23
: itulah sintaks penugasan variabel yang benar: kata yang terdiri dari huruf yang tidak dikutip, digit atau garis bawah diikuti oleh tanda kutip=
yang muncul di depan argumen perintah (di sini sendiri)var =23
,var
perintah dengan=23
argumen (kecuali dizsh
mana=something
ada operator khusus yang meluas ke jalursomething
perintah. Di sini, Anda mungkin akan mendapatkan kesalahan karena23
tidak mungkin menjadi nama perintah yang valid).var= 23
: tugas yangvar=
diikuti oleh nama perintah23
. Itu dimaksudkan untuk mengeksekusi23
denganvar=
diteruskan ke lingkungannya (var
variabel lingkungan dengan nilai kosong).var = 23
,var
perintah dengan=
dan23
sebagai argumen. Coba denganecho = 23
misalnya.Keluarga Csh
csh
dantcsh
. Tugas variabel ada denganset var = value
sintaks untuk variabel skalar,set var = (a b)
untuk array,setenv var value
untuk variabel lingkungan,@ var=1+1
untuk penilaian tugas dan aritmatika.Begitu:
var=23
hanya menjalankanvar=23
perintah.var =23
memohonvar
perintah dengan=23
sebagai argumen.var= 23
memohonvar=
perintah dengan23
sebagai argumenvar = 23
memohonvar
perintah dengan=
dan23
sebagai argumen.Keluarga Rc
Itu
rc
,es
danakanga
. Dalam shell tersebut, variabel adalah array dan tugas denganvar = (foo bar)
, denganvar = foo
menjadi kependekanvar = (foo)
(array dengan satufoo
elemen) danvar =
kependekanvar = ()
(array tanpa elemen, gunakanvar = ''
untuk array dengan satu elemen kosong).Dalam kasus apa pun, ruang kosong (spasi atau tab) di sekitarnya
=
diizinkan dan opsional. Jadi dalam shell tersebut 4 perintah itu sama dan setaravar = (23)
untuk menetapkan array dengan satu elemen23
.Ikan
Dalam
fish
, sintaks penugasan variabel adalahset var value1 value2
. Seperti dalamrc
, variabel adalah array.Jadi perilakunya akan sama dengan
csh
, kecuali itufish
tidak akan membiarkan Anda menjalankan perintah dengan=
namanya. Jika Anda memiliki perintah tersebut, Anda perlu untuk memohon melaluish
misalnya:sh -c 'exec weird===cmd'
.Jadi semua
var=23
danvar= 23
akan memberi Anda kesalahan,var =23
akan memanggilvar
perintah dengan=23
sebagai argumen danvar = 23
akan memanggilvar
perintah dengan=
dan23
sebagai argumen.sumber
var=23
menugaskan 23 ke variabelvar
.var =23
mencoba menjalankan perintah (atau alias, atau fungsi)var
dengan argumen=23
var = 23
juga, tetapi argumen=
dan23
var= 23
setvar
variabel environment ke string kosong, lalu jalankan perintah23
Ya, shell aneh sebagai bahasa pemrograman. Tapi itu masuk akal sebagai shell untuk penggunaan interaktif, di mana spasi memisahkan perintah dan argumen. Kebanyakan "karakter khusus" (
=
dalam hal ini) hanya memiliki arti khusus di posisi tertentu, untuk memungkinkan argumen yang hampir sewenang-wenang untuk perintah. Lihat interpretasi di atas.sumber
var=23
adalah sintaks yang benar untuk menetapkan nilai ke variabel.var =23
dianggap sebagai perintahvar
dengan=23
opsi / argumen untuk perintahvar
(Meskipun sintaks yang benar / standar untuk argumen / opsi adalah-option
atau--option
)var= 23
tidak akan memberikan apa punvar
sebagai ruang putih memecah proses penugasan dan23
akan dianggap sebagai perintah lain. Solusinya adalahvar=\ 23
atauvar=' 23'
untuk menyimpan ruang putih.var = 23
memiliki efek yang sama seperti yang dibahas dalam 2 nd kasus.Sebenarnya jenis penggunaan ruang sekitar
=
ini biasanya digunakan dalam kondisi pengujian di dalam[[ ]]
. Contoh untuk Bash:Dan setelah semua perilaku ruang putih di sekitar
=
tergantung pada shell Anda dan bahasa pemrograman.sumber