Roe*_*aar 3 shell bash quoting command-substitution variable-substitution
这是 Bash 错误吗?
$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file
Run Code Online (Sandbox Code Playgroud)
为什么第二个输出是对*
(所有)文件名的解析,而不仅仅是文字*
输出?看起来像 Bash 中的错误?
在 Ubuntu 18.04,bash 版本 4.4.19(1)-release 上试过。预计在其他操作系统上也是如此。
Spa*_*awk 13
不,这不是错误。你已经证明
echo '*'
Run Code Online (Sandbox Code Playgroud)
将产生一个文字*
. 因此,当您替换此输出时,按照以下命令
TEST=$(echo '*')
Run Code Online (Sandbox Code Playgroud)
它将放入*
变量中$TEST
。那么当你
echo $TEST
Run Code Online (Sandbox Code Playgroud)
glob 将在这里扩展。您可以通过运行最后一条命令、更改目录,然后再次运行来验证这一点。
*
如果你说,你会得到输出
echo "$TEST"
Run Code Online (Sandbox Code Playgroud)
正如这里所解释的,双引号允许扩展变量但阻止 glob 扩展。
归档时间: |
|
查看次数: |
2700 次 |
最近记录: |