Bash - 展示替换顺序



>我试图演示替换的顺序;主要是变量替换,命令替换和通配依次发生。 我执行了以下命令,但没有得到预期的输出。

bash-4.1$ a=file*
bash-4.1$ ls $(echo $($(b=$a)))

我希望输出列出所有以"file"开头的文件名,但它输出目录中所有文件的列表。 知道为什么吗?

$(...)命令替换返回命令的输出,对于赋值,该输出为空。所以你最终只是运行ls.

参数

和算术扩展以及命令替换同时计算,最左边最里面到右。赋值、空和空扩展以及重定向都是有效的简单命令。赋值将丢失到子外壳中,而要echo的参数将扩展到任何内容。 echo输出换行符,但命令替换会剥离它,并且ls不会获得任何参数。此外,如果您希望a=file*执行比分配文本字符串更多的事情,则分配中不会发生路径名扩展。

请参阅:http://wiki.bash-hackers.org/syntax/grammar/parser_exec

当你弄清楚所有这些时,这是一个挑战问题。x的价值是什么?(显示更多的扩展顺序和一些小的 Bash 怪癖。

declare -i x=0
x+=${x:-1} let x+=2 $((x+=4)) {x}<&$((x+=8,0))

最新更新