2014-10-06 19 views
1

有沒有辦法在不使用eval的情況下爲純shell中的動態命名變量(即sh,而不是bash)分配任意值?不使用eval的純shell中的動態變量賦值

我想知道是否有辦法避免使用eval,因爲它可以允許任意代碼執行。

let似乎只適用於數值。

+1

你能澄清你的要求嗎?在你接受的答案中的'declare'命令不是「純粹的shell」,因爲它是一個'bash'擴展,不是POSIX'sh'的一部分。 – chepner 2014-10-06 16:13:06

回答

1

試試declare:它允許您在運行中指定變量。

v="test" 
declare my$v="hello" 
echo "$mytest" 

返回:

hello 

可以在man declare找到更多的信息 - 我無法找到的Shell手冊的參考。

+0

@rhlee你是什麼意思的「純殼」? 'declare'是一個'bash'擴展名,並不適用於每個POSIX兼容的shell。 – chepner 2014-10-06 15:53:15

+0

@chepner在這個問題上更好的評論,因爲rhlee不會在這裏得到通知。 – fedorqui 2014-10-06 15:58:19

+0

@chepner是的我昨天發現了純粹和非純粹的炮彈之間的區別。該腳本在cygwin上運行良好,但在linux上給了我'declare:not found'。我遇到了https://wiki.ubuntu.com/DashAsBinSh,它告訴我使用'local'而不是'declare'。然而,我得到了'local:不在函數中',所以我將整個腳本包裝在一個函數中,並且調用它並且一切正常。我認爲fedorqui的答案仍然算是正確的答案,因爲我沒有指定純粹的shell。 – rhlee 2014-10-07 15:19:33