我想在脚本之间同步一些环境变量。因此,例如,在一个脚本中我可能有:
foo="some value with \"quoted part\""
echo foo="$foo" > tmp.sh;
然后在另一个脚本中,我想运行./tmp.sh
。问题在于空白和引号。 tmp.sh脚本包含:
foo=string with "quoted part"
由于空白而无法正常工作。如果我使用\"
' s,则会产生:
foo="string with "quoted part""
失败,因为现在引号内的空格看起来像引号之外。我想要的是:
foo="string with \"quoted part\""
当然,它应该处理已经转义的引号等。是否有任何可靠的方法在bash中引用字符串,以便稍后可以用于作业?
答案 0 :(得分:3)
使用printf '%q'
:
$ printf 'foo=%q\n' "$foo"
foo=some\ value\ with\ \"quoted\ part\"
看起来略有不同,但效果相同;反斜杠分别引用需要转义的每个字符,而不是不必要地转义整个字符串(例如,因为\v
和v
是相同的字符)。