下面一行:
`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/