[英]why this command does not work: cd `echo -n “~”`
運行命令
cd \`echo -n "~"\`
我收到以下錯誤:
bash: cd: ~: No such file or directory
如果'cd ~'
工作正常,會出現什么問題?
如果你執行cd ~
,shell會在執行命令之前將~
擴展到你的主目錄。 但是如果你使用雙引號( "~"
),那么這將被視為文字字符串而不是擴展。
你可以看到差異:
$ echo ~
/home/username
$ echo "~"
~
為了通過shell擴展~
,您需要刪除雙引號。
雙引號的轉義行為在Bash手冊中有所描述: http : //www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
問題是bash在命令替換后不會進行額外的擴展。 因此,雖然cd ~
按照你想要的方式擴展,但cd $(echo '~')
卻沒有。
有一個名為eval
的關鍵字是為這種情況創建的 - 它會強制命令行再次擴展( 評估 )。 如果在該行上使用eval
,它會強制~
擴展到用戶目錄,即使已經過了正常的擴展時間。 (因為在運行echo命令之前~
不存在,並且在那時,對於擴展來說為時已晚。)
eval cd `echo -n "~"`
如果您只是執行cd "~"
您也會遇到同樣的問題:
$ cd "~"
bash: cd: ~: No such file or directory
cd
不明白~
很特別。 它嘗試並失敗,找到一個字面上稱為~
的目錄。
cd ~
工作的原因是bash
在運行之前編輯了命令。 bash
用cd ~
cd $HOME
替換cd ~
,然后擴展$HOME
以獲得cd /home/YourUsername
。
因此,
cd `echo -n "~"`
變
cd "~"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.