Bash我可以在沒有
我可以在沒有 eval
的情況下在 {} 擴展中使用變數嗎?
我可以在
{}
擴展中使用變數而不吸引人eval
嗎?如果是這樣,怎麼做?這不起作用:
$ touch 1.foo 1.bar $ ls 1.{foo,bar} 1.bar 1.foo $ extensions=foo,bar $ ls 1.{$extensions} ls: cannot access 1.{foo,bar}: No such file or directory
它適用於
eval
:$ eval ls 1.{$extensions} 1.bar 1.foo
大括號擴展在擴展過程中很早就發生(實際上是第一件事),在變數擴展之前。要對變數擴展的結果執行大括號擴展,您需要使用
eval
.
eval
如果您不extensions
使用萬用字元模式而不是大括號模式,則可以實現相同的效果。設置extglob
選項以啟動類似 ksh 的模式。shopt -s extglob extensions='@(foo|bar)' ls 1.$extensions
這是一種在沒有 eval的情況下在大括號內擴展變數的方法:
end=3 declare -a 'range=({'"1..$end"'})'
我們現在有一個很好的數字數組:
for i in ${range[@]};do echo $i;done 1 2 3
在 bash 4.3.11 中測試,但應該適用於所有現代版本。