2017-02-28 116 views
1

解釋我有一個bash腳本的字符串bash的字符串作爲變量

foo="~/mydir" (not foo=~/mydir) 

然後我需要創建使用此目錄

mkdir ${foo} 

是任何方式foo就可以作爲

解釋
<"user's home directory">/mydir 

但不

<"current work directory">/~/mydir. 
+0

你真的應該只設置'foo'正確。使用'foo =〜/「mydir」'或'foo = $ HOME/mydir'。 – chepner

回答

0

正如指出的那樣,您可以使用$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) 

希望它能幫助。

+0

這對我很有幫助,非常感謝。 – user3596098