なぜ `${$(pwd)}` は zsh で現在の作業ディレクトリを出力するのでしょうか?

なぜ `${$(pwd)}` は zsh で現在の作業ディレクトリを出力するのでしょうか?

zsh で、${$(pwd)}現在のディレクトリを出力します。ただし、 を実行するとecho ${/path/to/somewhere}、空の行だけが表示されます。なぜこのようなことが起こるのでしょうか? ありがとうございます!

答え1

print ${$(pwd)}とか、そういうことを話しているんでしょうね?!

現在の作業ディレクトリへの展開は ${$(pwd)}、一見奇妙に見えるかもしれませんが、期待される動作です。コマンド置換が$(pwd)最初に評価され、その結果が次のように使用されると誤解しないでください。変数名...いいえ、それは変数値 次のようにman zshexpn説明している。

${name} パラメータ名の値が置換されます(存在する場合)。

(...) 上記の の代わりに${...}型パラメータ式または型コマンド置換が使用される場合、まずそれが展開され、その結果が の値であるかのように使用されます。 (...) の形式は、次に説明するフラグと組み合わせて使用​​すると便利な場合が多くあります。以下の例を参照してください。$(...)namename$(...)

(...) フラグ f は、二重引用符で囲まれた置換を行ごとに分割するのに役立ちます。たとえば、${(f)"$(<file)"}ファイルの内容を分割して置換し、各行が結果の配列の要素になるようにします。

2 番目の例です。これはパターン置換構文だと思います:

${name/pattern/repl} パラメータ名の展開におけるパターンの最長一致を文字列置換で置き換えます。(...)

まずこの例を見てください:

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

省略すると、空の変数内で検索と置換を実行するようにfoo指示されます。zsh${}

$ print ${}

$

-- したがって、${/something/foo/bar}空の文字列も返されます。

関連情報