【发布时间】:2012-11-13 01:11:40
【问题描述】:
我有一个 shell 变量(我们称之为x),其中包含一个带有 shell 元字符的字符串。例如,我可能有
abc "def's" ghi
按照设置
x='abc "def'\''s" ghi'
我想从该字符串构建一个 shell 命令(存储在文件中,不执行)。我有哪些选择?
echo "prog $x" >>file # Doesn't work
echo "prog '$x'" >>file # Doesn't work
echo "prog \"$x\"" >>file # Doesn't work
目前的解决方案使用sed
y=`echo "$x" | sed 's/\([^a-zA-Z0-9._\-\/]\)/\\\\\1/g'`
echo "prog $y" >>file
输出如下(虽然等效输出也可以):
prog abc\ \ \"def\'s\"\ \ ghi
问题是需要做的地方越来越多。谁有更好的解决方案?
注意事项:
- 必须为
sh(而不是bash)工作,并且任何sh都可以合理地别名为(例如,sh仿真模式下的bash)。 - 它必须尽可能便携(Windows 除外)。
- 使用
perl是不可接受的,但随处可见的其他 unix 工具的使用可能是。
【问题讨论】:
-
或许这里的功能会起作用? stackoverflow.com/a/12162717/1013153
-
@Kiyura,谢谢,从中得出了一个解决方案(见下文)。使用单引号看起来更干净,但我想尽可能少地摇晃船,因为这是
perl的安装程序。大多数时候,根本不需要转义。