在zsh中,${$(pwd)}
輸出目前目錄。但是,如果我運行echo ${/path/to/somewhere}
,它只會顯示一個空白行。為什麼會出現這種情況?謝謝!
答案1
我想,你會談論print ${$(pwd)}
類似的事情,對嗎?
擴展 ${$(pwd)}
到當前工作目錄是預期的行為,儘管乍一看可能看起來很奇怪。不要讓您以為命令替換$(pwd)
首先被評估,然後將結果用作變數名……不,它被用作變數值 解釋如下man zshexpn
:
${name}
參數名稱的值(如果有)將被替換。(...) 如果使用
${...}
類型參數表達式或類型命令替換來代替上述內容,則首先對其進行擴展,並使用結果,就好像它是 的值一樣。 (...) with 形式通常與下面描述的標誌結合使用;請參閱下面的範例。$(...)
name
name
$(...)
(...) 標誌 f 對於逐行分割雙引號替換很有用。例如,
${(f)"$(<file)"}
替換文件的內容劃分,以便每一行都是結果陣列的元素。
對於你的第二個例子。我認為這是模式替換語法:
${name/pattern/repl}
將參數名稱擴展中模式的最長可能匹配替換為字串 repl。 (...)
首先看這個例子:
$ foo=hello
$ print ${foo/hello/good/bye}
good/bye
如果省略,foo
則告訴您zsh
在變數中進行搜尋並替換${}
,變數為空:
$ print ${}
$
-- 因此${/something/foo/bar}
也回傳一個空字串。