gpt4 book ai didi

bash - 如何在 bash 中分隔传递给 eval 的多个命令

转载 作者:行者123 更新时间:2023-11-29 08:52:40 25 4
gpt4 key购买 nike

我正在尝试使用 eval 评估多行 shell 命令,但是当我尝试使用由换行符分隔的 eval 解析变量时 \n 变量不是已解决。

x='echo a'
y='echo b'
z="$x\n$y"
eval $x
eval $y
eval $z

哪些输出:

a
b
anecho b

最后一个命令给出了 anecho b,显然 \n 在那里被视为 n。那么有没有办法评估多行命令(比如,用 \n 分隔)?

最佳答案

\n 不是换行;它是一个转义序列,在某些情况下 将被翻译成换行符,但您没有在其中一种情况下使用它。变量 $z 不会包含换行符,只是反斜杠后跟“n”。结果,这就是实际执行的内容:

$ echo a\necho b
anecho b

您可以改用分号(不需要翻译),或者在翻译成换行符的上下文中使用\n:

$ newline=$'\n'
$ x='echo a'
$ y='echo b'
$ z="$x$newline$y"
$ eval "$z"
a
b

请注意 "$z" 周围的双引号——它们在这里实际上很重要。没有它们,bash 将对 $z 的值进行分词,将所有空白(空格、制表符、换行符)变成分词符。如果发生这种情况,eval 将收到单词“echo” “a” “echo” b”,有效地将换行符变成空格:

$ eval $z
a echo b

这是对变量引用进行双引号很重要的一长串案例中的又一案例。

关于bash - 如何在 bash 中分隔传递给 eval 的多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com