在 zsh 中,${$(pwd)}
输出当前目录。但是,如果我运行echo ${/path/to/somewhere}
,它只会显示一个空行。为什么会这样?谢谢!
答案1
我想您会谈论print ${$(pwd)}
或类似的事情,对吧?!
扩展 ${$(pwd)}
到当前工作目录是预期的行为,尽管乍一看可能看起来很奇怪。不要误以为命令替换$(pwd)
首先被评估,然后结果被用作变量名...不,它被用作变量值 解释如下man zshexpn
:
${name}
如果有的话,将替换参数名称的值。(...)如果使用
${...}
类型参数表达式或$(...)
类型命令替换代替name
上述内容,则首先对其进行扩展,然后将结果用作值name
。 (...)with 形式$(...)
通常与接下来描述的标志结合使用;请参见下面的示例。(...) 标志 f 可用于逐行拆分双引号替换。例如,
${(f)"$(<file)"}
替换文件的内容,以便每行都是结果数组的一个元素。
对于你的第二个例子。我认为这是模式替换语法:
${name/pattern/repl}
用字符串替换参数名称扩展中模式的最长可能匹配。(...)
首先看这个例子:
$ foo=hello
$ print ${foo/hello/good/bye}
good/bye
如果省略,foo
则告诉zsh
在变量中进行搜索和替换${}
,该变量为空:
$ print ${}
$
——因此${/something/foo/bar}
也返回一个空字符串。