bash 反引号到底发生了什么?

bash 反引号到底发生了什么?

我一直认为 bash 中的反引号是“执行的输出'some_command'”。下面发生了什么……考虑一个myscript.pl打印以下文本的脚本:

   导出 PS1="[STRING] $PS1"

如果我将输出复制到cat file.txt命令行并执行,“[STRING]”将添加到提示符的前面。

另一方面,使用反引号'myscript.pl'会使我的提示变为"[STRING]。发生了什么?

答案1

bash没有执行反引号命令的输出,仅替代它。(此功能称为命令替换毕竟。)

如果替换内容没有用双引号引起来,单词拆分对命令的输出进行操作,但会忽略引号和其他特殊字符;export PS1="[STRING] $PS1"只需将其拆分$IFS为:

  • export
  • PS1="[STRING
  • $PS1"

如果要执行文件的内容,请获取它:

。 ./文件.txt

或者,非 POSIX:

源 ./file.txt

如果你希望将所有标准解析应用于替换(例如变量),则可以使用eval "$commands"或者eval "$(foo)"或者eval "`foo`"。但要非常小心。

相关内容