我想提領兩個或包含在一個單一的變量更多的變量,但我想不出如何做到這一點不EVAL:猛砸間接引用,其中一個變種引用多個
$:b=5
$:c=10
$:a='$b $c'
$:result=`eval echo $a`
$:echo $result
5 10
我期待做相同的操作,給我'結果',所以我不必做一個評估。是否有可能以任何其他方式解析由單個變量引用的多個變量?我要做到這在bash
我想提領兩個或包含在一個單一的變量更多的變量,但我想不出如何做到這一點不EVAL:猛砸間接引用,其中一個變種引用多個
$:b=5
$:c=10
$:a='$b $c'
$:result=`eval echo $a`
$:echo $result
5 10
我期待做相同的操作,給我'結果',所以我不必做一個評估。是否有可能以任何其他方式解析由單個變量引用的多個變量?我要做到這在bash
EVAL聽起來挺嚇人的......
這裏是一個更好的解決方案:
Bash Templating: How to build configuration files from templates with Bash?
你只是有那麼它遵循調整它有點你的語法。
我喜歡perl解決方案,因爲它不使用eval。另外你可能會注意到我首先提出這個問題,因爲我對eval不滿意;)謝謝。 – fthinker 2012-02-17 19:29:54
總之,不,我認爲你必須使用eval作爲你的代碼中的多變量間接引用。
似乎有兩種類型的Bash的間接變量引用,一個與eval
和一個用特殊符號${!var}
:
$ b=5
$ a=b
$ echo ${!a}
5
也許使用數組會滿足您的需求:
$ b=5
$ c=10
$ a=(b c)
$ echo ${!a[0]} ${!a[1]}
5 10
不,這是不可能的。 eval是危險的,要謹慎。任何理由這樣做? – 2012-02-17 17:02:41
我維護一個腳本,用於取消引用腳本中包含變量的環境變量。環境變量是否總會包含變量尚不清楚。例如,在一次喚醒var INPUT =「曾經一次」和另一次它可能包含INPUT =「曾經有一次$ ladname」,其中$ ladname可能存在或可能不存在於我維護的腳本中。這是你的問題的複雜答案,它不是所有相關的:) – fthinker 2012-02-17 19:09:00