相关疑难解决方法(0)

如何在 -n 或 -p 模式下使用 Perl 处理选项?

运行perl -n或 时perl -p,每个命令行参数都被当作一个文件来逐行打开和处理。如果您想将命令行开关传递给该脚本,我该怎么做?

perl command-line-interface

4
推荐指数
1
解决办法
265
查看次数

从 sh 中生成 sh 代码:转义

我有一个 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可以合理地别名(例如bashsh仿真模式下)。
  • 它必须尽可能便携(Windows 除外)。
  • 使用perl是不可接受的,但使用随处可见的其他 UNIX 工具可能是可接受的。

escaping sh

2
推荐指数
1
解决办法
1268
查看次数

标签 统计

command-line-interface ×1

escaping ×1

perl ×1

sh ×1