我一直认为 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`"
。但要非常小心。