bash如何引用带引号的字符串

时间:2017-10-19 17:24:39

标签: bash

我想在脚本之间同步一些环境变量。因此,例如,在一个脚本中我可能有:

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中引用字符串,以便稍后可以用于作业?

1 个答案:

答案 0 :(得分:3)

使用printf '%q'

$ printf 'foo=%q\n'  "$foo"
foo=some\ value\ with\ \"quoted\ part\"

看起来略有不同,但效果相同;反斜杠分别引用需要转义的每个字符,而不是不必要地转义整个字符串(例如,因为\vv是相同的字符)。