解釋我有一個bash腳本的字符串bash的字符串作爲變量
foo="~/mydir" (not foo=~/mydir)
然後我需要創建使用此目錄
mkdir ${foo}
是任何方式foo就可以作爲
解釋<"user's home directory">/mydir
但不
<"current work directory">/~/mydir.
解釋我有一個bash腳本的字符串bash的字符串作爲變量
foo="~/mydir" (not foo=~/mydir)
然後我需要創建使用此目錄
mkdir ${foo}
是任何方式foo就可以作爲
解釋<"user's home directory">/mydir
但不
<"current work directory">/~/mydir.
正如指出的那樣,您可以使用$HOME
來指示用戶的主目錄。
但要注意:
富= 「〜/ MYDIR」
不擴張的波浪線,所以 「回聲$富」 仍然導致 「〜/ MYDIR」。如果你想擴大波浪線,你可以使用
eval foo=$foo
現在「回聲$富」例如導致「/家/弗雷德/ MYDIR」。
代字號擴展有點特別,它不是$ HOME的簡單替換;看看下面:
foo="~/mydir"
echo ${foo/#\~/$HOME} (reply: /home/administrator/mydir)
eval foo=$foo
echo $foo (reply: /home/administrator/mydir)
---
foo="~administrator/mydir"
echo ${foo/#\~/$HOME} (reply: /home/administratoradministrator/mydir)
eval foo=$foo
echo $foo (reply: /home/administrator/mydir)
換句話說:如果你所要的簡單形式「〜/ ...」,以取代$ HOME的波浪效果很好。如果你有更高級的格式,那麼eval會更好,正如你在上面第二個例子中看到的那樣。
簡單的 「EVAL富= $ foo的」 在文件名中有空格的問題:
foo="~administrator/mydir with spaces"
eval foo=$foo (error: with: command not found)
以下語法是更好:
foo2=$(eval echo $foo)
echo $foo2 (ok: /home/administrator/mydir with space)
希望它能幫助。
這對我很有幫助,非常感謝。 – user3596098
你可以推遲使用波浪當你需要創建目錄,直到:
foo="mydir"
....
mkdir ~/"$foo"
的波浪線擴展到只有不帶引號的主目錄。 Bash的手冊
相關章節: https://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion
你真的應該只設置'foo'正確。使用'foo =〜/「mydir」'或'foo = $ HOME/mydir'。 – chepner