有沒有辦法在不使用eval
的情況下爲純shell中的動態命名變量(即sh
,而不是bash
)分配任意值?不使用eval的純shell中的動態變量賦值
我想知道是否有辦法避免使用eval
,因爲它可以允許任意代碼執行。
let
似乎只適用於數值。
有沒有辦法在不使用eval
的情況下爲純shell中的動態命名變量(即sh
,而不是bash
)分配任意值?不使用eval的純shell中的動態變量賦值
我想知道是否有辦法避免使用eval
,因爲它可以允許任意代碼執行。
let
似乎只適用於數值。
試試declare
:它允許您在運行中指定變量。
v="test"
declare my$v="hello"
echo "$mytest"
返回:
hello
可以在man declare
找到更多的信息 - 我無法找到的Shell手冊的參考。
@rhlee你是什麼意思的「純殼」? 'declare'是一個'bash'擴展名,並不適用於每個POSIX兼容的shell。 – chepner 2014-10-06 15:53:15
@chepner在這個問題上更好的評論,因爲rhlee不會在這裏得到通知。 – fedorqui 2014-10-06 15:58:19
@chepner是的我昨天發現了純粹和非純粹的炮彈之間的區別。該腳本在cygwin上運行良好,但在linux上給了我'declare:not found'。我遇到了https://wiki.ubuntu.com/DashAsBinSh,它告訴我使用'local'而不是'declare'。然而,我得到了'local:不在函數中',所以我將整個腳本包裝在一個函數中,並且調用它並且一切正常。我認爲fedorqui的答案仍然算是正確的答案,因爲我沒有指定純粹的shell。 – rhlee 2014-10-07 15:19:33
你能澄清你的要求嗎?在你接受的答案中的'declare'命令不是「純粹的shell」,因爲它是一個'bash'擴展,不是POSIX'sh'的一部分。 – chepner 2014-10-06 16:13:06