我已經從文件中讀取了一行bash代碼,並且我想將它發送給日誌。爲了使它更有用,我想發送該行的可變展開版本。如何強制bash對字符串進行可變擴展?
我只想擴展shell變量。我不希望管道被解釋,也不希望產生任何邊過程,比如當擴展與$(rm -r /)
一行時。
我知道變量擴展是非常深入編織到bash中。我希望有一種方法可以執行只是擴展,沒有任何副作用,可能來自管道,外部程序和 - 也許這裏的文件。可能是eval
?
#!/bin/bash
linenr=42
line=`sed "${linenr}q;d" my-other-script.sh`
shell-expand $line >>mylog.log
我想要一種只擴展shell變量的方法。 如果x=a
,a="example"
那麼我想下面的擴展:
echo $x
應該echo a
。
echo ${a}
應該echo example
touch ${!x}.txt
應該touch example.txt
if [ ((${#a} - 6 )) -gt 10 ]; then echo "Too long string"
應該if [ 1 -gt 10 ]; then echo "Too long string"
echo "\$a and \$x">/dev/null
應該echo "\$a and \$x>dev/null"
非常感謝您的回答。我已經知道Bash的評價不合適,否則我不會問這個問題。其實我下意識地想着'R'的評價(而'R'是一種主要功能的編程語言,所以幾乎沒有任何與評估相關的副作用)。對錯誤信息抱歉。 – 2014-11-25 18:31:08
'sed「$ {42} q; d」my-other-script.sh'是一個錯字;它應該是:'sed「42q; d」my-other-script.sh'或更好 - 我把它放在我的答案上。我明白,這個'sed'調用只能產生一行。 – 2014-11-25 18:41:30
您可以在一個子命令中使用兩個回聲:'echo「$(echo」我的用戶名是$ USER「)」'但引用必須小心。 – 2014-11-25 18:46:40