Tugas variabel memiliki bentuk nama variabel, diikuti oleh tanda sama dengan, diikuti oleh nilai (opsional).
Ini adalah tugas yang valid:
ABC=123
"$x"1=1
bukan tugas yang valid, karena "$x"1
bukan nama variabel. Mungkin eval uated untuk nama variabel, tetapi tidak. Shell, pada kenyataannya, percaya itu adalah perintah.
Salah satu cara untuk melakukan apa yang ingin Anda capai adalah ini:
eval "$x"1=1
Cara lain di bash (tetapi tidak di shell lain) adalah:
declare "$x"1=1
Atau juga (khusus lagi bash):
let "$x"1=1
(Tidak ada banyak perbedaan dalam kasus Anda.)
Tetapi, seperti yang dicatat Jakuje dalam komentar , Anda mungkin ingin menggunakan array, jika shell Anda memilikinya (ksh, bash atau zsh).
Untuk kelengkapan:
eval
mengeksekusi perintah sewenang-wenang. Jadi, jika di sisi kanan tanda sama dengan Anda memiliki variabel yang mengembang ke beberapa perintah, perintah itu akan dieksekusi. Kode berikut:
x=a
y='$(echo hello)'
eval "$x=$y"
setara dengan a=hello
.
declare
adalah bash builtin untuk menetapkan variabel dan tidak akan menjalankan perintah apa pun. Kode berikut:
x=a
y='$(echo hello)'
declare "$x=$y"
setara dengan a='$(echo hello)'
.
let
mirip dengan declare
, dalam hal itu tidak menjalankan perintah. Tetapi bertentangan dengan declare
, let
dapat digunakan untuk operasi aritmatika:
let a="1 + 2"
setara dengan a=3
.