Bu dizinin sizi yakalayan kısmı olduğundan şüpheleniyorum:
Değişken atamaları veya yeniden yönlendirmeleri olmayan kelimeler genişletilir (bkz. Kabuk Genişletmeleri). Genişletmeden sonra herhangi bir sözcük kalırsa, ilk sözcük komutun adı olarak alınır ve geri kalan sözcükler bağımsız değişkenlerdir
Bu , Basit Komut Genişletme bölümündeki Bash referans kılavuzundan alınmıştır.
Olarak cmd=bash
, örneğin, herhangi bir ortam değişkenleri ayarlanır ve deneme bırakarak parametre genişletilmesi yoluyla komut hattı işler bash -c "echo hi"
.
Olarak prefix=hello=hi
işlem bir birinci kelime ile sonuçlanan, parametre devam böylece, örneğin, birinci geçişte herhangi bir değişken atamaları, daha vardır hello=hi
.
Değişken atamaları işlendikten sonra, komut yürütme sırasında yeniden işlenmezler.
İşleme ve sonuçlarını aşağıdaki bölümlere bakın set -x
:
$ prefix=hello=hi
+ prefix=hello=hi
$ $prefix bash -c 'echo $hello'
+ hello=hi bash -c 'echo $hello'
-bash: hello=hi: command not found
$ hello=42 bash -c 'echo $hello'
+ hello=42
+ bash -c 'echo $hello'
42
"Değişken genişleme" -as- "çevre değişkenleri" den daha güvenli bir varyasyon için, wjandrea'nın şu önerisinieval
göz önünde bulundurun :env
prefix=hello=hi
env "$prefix" bash -c 'echo "$hello"'
hi
Bu, bir komut satırı değişken ataması değildir, çünkü env
yardımcı programın bir komuta ortam değişkenleri atama ana işlevini kullanıyoruz , ancak aynı hedefi gerçekleştiriyor. $prefix
Değişken adı = değer sağlayan komut satırı işlenmesi esnasında genişletilir env
yanında geçirir, bash
.
env
yerineeval
IIRC daha güvenli, ancak daha yavaş olan.