簡體   English   中英

為什么這個命令不起作用:cd`echo -n“〜”`

[英]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在運行之前編輯了命令。 bashcd ~ cd $HOME替換cd ~ ,然后擴展$HOME以獲得cd /home/YourUsername

因此,

cd `echo -n "~"`

cd "~"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM