zsh で、${$(pwd)}
現在のディレクトリを出力します。ただし、 を実行するとecho ${/path/to/somewhere}
、空の行だけが表示されます。なぜこのようなことが起こるのでしょうか? ありがとうございます!
答え1
print ${$(pwd)}
とか、そういうことを話しているんでしょうね?!
現在の作業ディレクトリへの展開は ${$(pwd)}
、一見奇妙に見えるかもしれませんが、期待される動作です。コマンド置換が$(pwd)
最初に評価され、その結果が次のように使用されると誤解しないでください。変数名...いいえ、それは変数値 次のようにman zshexpn
説明している。
${name}
パラメータ名の値が置換されます(存在する場合)。(...) 上記の の代わりに
${...}
型パラメータ式または型コマンド置換が使用される場合、まずそれが展開され、その結果が の値であるかのように使用されます。 (...) の形式は、次に説明するフラグと組み合わせて使用すると便利な場合が多くあります。以下の例を参照してください。$(...)
name
name
$(...)
(...) フラグ f は、二重引用符で囲まれた置換を行ごとに分割するのに役立ちます。たとえば、
${(f)"$(<file)"}
ファイルの内容を分割して置換し、各行が結果の配列の要素になるようにします。
2 番目の例です。これはパターン置換構文だと思います:
${name/pattern/repl}
パラメータ名の展開におけるパターンの最長一致を文字列置換で置き換えます。(...)
まずこの例を見てください:
$ foo=hello
$ print ${foo/hello/good/bye}
good/bye
省略すると、空の変数内で検索と置換を実行するようにfoo
指示されます。zsh
${}
$ print ${}
$
-- したがって、${/something/foo/bar}
空の文字列も返されます。