运行perl -n或 时perl -p,每个命令行参数都被当作一个文件来逐行打开和处理。如果您想将命令行开关传递给该脚本,我该怎么做?
我有一个 shell 变量(我们称之为x),其中包含一个带有 shell 元字符的字符串。例如,我可能有
abc "def's" ghi
Run Code Online (Sandbox Code Playgroud)
由设置
x='abc "def'\''s" ghi'
Run Code Online (Sandbox Code Playgroud)
我想从该字符串构建一个 shell 命令(存储在文件中,而不是执行)。我有什么选择?
echo "prog $x" >>file # Doesn't work
echo "prog '$x'" >>file # Doesn't work
echo "prog \"$x\"" >>file # Doesn't work
Run Code Online (Sandbox Code Playgroud)
目前的解决方案使用sed
y=`echo "$x" | sed 's/\([^a-zA-Z0-9._\-\/]\)/\\\\\1/g'`
echo "prog $y" >>file
Run Code Online (Sandbox Code Playgroud)
输出如下(尽管等效输出也是可以接受的):
prog abc\ \ \"def\'s\"\ \ ghi
Run Code Online (Sandbox Code Playgroud)
问题是需要这样做的地方数量正在增加。有人有更好的解决方案吗?
笔记:
sh(与 相对bash)并且任何内容都sh可以合理地别名(例如bash在sh仿真模式下)。perl是不可接受的,但使用随处可见的其他 UNIX 工具可能是可接受的。