【发布时间】:2018-09-25 01:16:48
【问题描述】:
我可以从这两种表格中得到相同的结果吗?
例如:
for i in `seq 1 10`
for i in $(seq 1 10)
我从上面两个语句中得到了相同的结果。
【问题讨论】:
标签: bash
我可以从这两种表格中得到相同的结果吗?
例如:
for i in `seq 1 10`
for i in $(seq 1 10)
我从上面两个语句中得到了相同的结果。
【问题讨论】:
标签: bash
两者的区别在于对特殊字符的处理。
来自手册页:
命令替换
命令替换允许命令的输出替换 命令名称。有两种形式:
$(command)或
`command`Bash 通过执行命令并替换 用命令的标准输出替换命令,用 删除任何尾随换行符。嵌入式换行符不是 已删除,但在分词过程中可能会被删除。命令 替换 $(cat 文件) 可以替换为等效但 更快的 $(
当使用旧式反引号形式的替换时,反斜杠 保留其字面意义,除非后面跟着 $、` 或 .这 前面没有反斜杠的第一个反引号终止命令 替代。使用 $(command) 形式时,所有字符之间 括号构成命令;没有人受到特殊对待。
使用$() 表单,您无需担心转义任何特殊字符。如果您只想放置一个复杂的命令,这会很有帮助。
当您想在命令中进行任何类型的替换时,反引号形式很有用。
以下是两者不同时的示例:
XXX=x1.sh
YYY=`ls -l \$XXX`
ZZZ=$(ls -l \$XXX)
echo YYY = $YYY
echo ZZZ = $ZZZ
输出:
ls: cannot access $XXX: No such file or directory
YYY = -rwxr-xr-x. 1 dbush dbush 94 Apr 14 23:04 x1.sh
ZZZ =
【讨论】:
$(...),所以在$(...) 中嵌套反引号有什么特别的好处?我猜你指的是,例如$(sed 's/`stuff/`other/')?