linux - 输出shell变量时如何保留引号?

标签 linux shell unix formatting string-formatting

下面一行:

`eval echo echo $VAR=\\$$VAR` >> $FILE

将输出到名为 $FILE 的文件:

FOO=value_of_full
BAR=value_of_bar

我想输出引号,例如:

FOO="value_of_full"
BAR="value_of_bar"

我已经尝试过使用 \""" 但两者都没有像我预期的那样工作。

最佳答案

是您的eval 吞没了您的报价。

您可以使用 indirect variable referencing使用 bash >= 2.0 来减轻对 eval 的需要:

echo "${VAR}=\"${!VAR}\"" >> $FILE

不幸的是,不支持双重(或三重...)解引用,因此您不能执行 ${!!VAR}${!${!VAR} }——你仍然需要为那些求助于eval方法。但我认为在这种情况下你不需要那个。

如果你真的想使用eval,那么你将不得不双重转义你的转义符,就像这样:

eval echo "$VAR=\\\"\$$VAR\\\"" >> $FILE

或者,如果您真的需要额外的执行级别(如上面的示例所示),那么您需要进行三次转义!

`eval echo echo $VAR=\\\\\"\\$$VAR\\\\\"` >> $FILE

就我个人而言,我更喜欢第一种方法:-)

关于linux - 输出shell变量时如何保留引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148839/

相关文章:

linux - 无法在 debian 8 中 insmod hello_world 内核模块

linux - 即使当前命令失败,如何编写运行下一个命令的 shell 脚本?

UNIX 'ls' 命令排除通配符

linux - 从 Ubuntu 20 构建适用于 Ubuntu 18 的应用程序

c - readlink 系统调用有什么作用?

linux - Centos从文件添加多个接口(interface)到VLAN

linux - 如果文件名作为变量传递,如何使用 diff 命令比较两个 tar 文件的内容

java - SED:需要在字符串中使用 "/"才能使用 sed 进行追加

unix - awk gsub 返回奇怪的结果

php - 从 PHP 读取 .ini 文件时如何确保其安全