Değişken ataması, değişken adı, ardından eşittir işaretini ve ardından (isteğe bağlı) değeri içerir.
Bu geçerli bir ödev:
ABC=123
"$x"1=1
"$x"1
değişken bir ad olmadığından geçerli bir ödev değil. Olabilir eval bir değişken adına uated, ama değil. Kabuk aslında bunun bir emir olduğuna inanıyor.
Ulaşmak istediğiniz şeyi yapmanın bir yolu şudur:
eval "$x"1=1
Bash'taki başka bir yol (ancak diğer kabuklarda değil):
declare "$x"1=1
Ya da (yine sadece bash):
let "$x"1=1
(Davanızda çok fazla fark yok.)
Ancak, Jakuje'nin yorumlarda belirttiği gibi , kabuğunuzda (ksh, bash veya zsh) varsa muhtemelen dizilerle gitmek istersiniz.
Tamamlamak için:
eval
isteğe bağlı komutları yürütür. Eşittir işaretinin sağ tarafında bazı komutlara genişleyen bir değişken varsa, bu komut yürütülür. Aşağıdaki kod:
x=a
y='$(echo hello)'
eval "$x=$y"
eşittir a=hello
.
declare
değişken atamak için bir bash yerleşiktir ve herhangi bir komut yürütmez. Aşağıdaki kod:
x=a
y='$(echo hello)'
declare "$x=$y"
eşittir a='$(echo hello)'
.
let
, declare
komutları yürütmediği için benzerdir . Ancak, aksine declare
, let
aritmetik işlemler için kullanılabilir:
let a="1 + 2"
eşittir a=3
.