為什麼 `${$(pwd)}` 在 zsh 中輸出目前工作目錄?

為什麼 `${$(pwd)}` 在 zsh 中輸出目前工作目錄?

在zsh中,${$(pwd)}輸出目前目錄。但是,如果我運行echo ${/path/to/somewhere},它只會顯示一個空白行。為什麼會出現這種情況?謝謝!

答案1

我想,你會談論print ${$(pwd)}類似的事情,對嗎?

擴展 ${$(pwd)}到當前工作目錄是預期的行為,儘管乍一看可能看起來很奇怪。不要讓您以為命令替換$(pwd)首先被評估,然後將結果用作變數名……不,它被用作變數值 解釋如下man zshexpn

${name} 參數名稱的值(如果有)將被替換。

(...) 如果使用${...}類型參數表達式或類型命令替換來代替上述內容,則首先對其進行擴展,並使用結果,就好像它是 的值一樣。 (...) with 形式通常與下面描述的標誌結合使用;請參閱下面的範例。$(...)namename$(...)

(...) 標誌 f 對於逐行分割雙引號替換很有用。例如,${(f)"$(<file)"}替換文件的內容劃分,以便每一行都是結果陣列的元素。

對於你的第二個例子。我認為這是模式替換語法:

${name/pattern/repl} 將參數名稱擴展中模式的最長可能匹配替換為字串 repl。 (...)

首先看這個例子:

$ foo=hello
$ print ${foo/hello/good/bye}
good/bye

如果省略,foo則告訴您zsh在變數中進行搜尋並替換${},變數為空:

$ print ${}

$

-- 因此${/something/foo/bar}也回傳一個空字串。

相關內容