我发誓我已经看了又看。如果我在某个地方错过了这个问题的答案,我深表歉意;这意味着我的搜索失败了,而不是我没有尝试过。
我对 bash 脚本比较陌生(:sigh: newbie),但我正在尝试编写一个从用户那里获取一些输入并在另一个命令中使用它的脚本。我的问题是其他命令需要在用户输入中转义任何特殊字符。
代码的基本形式如下:
#!/bin/bash
echo "Enter info:"
read _INFO
othercommand info=$_INFO
在read
和othercommand
行之间,我需要进行按摩_INFO
,以便任何特殊字符 - 空格、单引号和双引号......几乎所有非字母数字字符,真的 - 都被转义。例如,一个输入this pipe: | is my info!
应该变成this\ pipe\:\ \|\ is\ my\ info\!
注意:我不能将引号 - 单引号或双引号 - 放入该othercommand
行,因为它会导致命令失败。信息字符串需要保持原样,除了转义。
我尝试过以各种方式使用字符串替换宏(这里有一些只检查空格的例子):
_INFO = ${$_INFO// /\ }
_INFO = ${$_INFO// /\\ }
_INFO = ${$_INFO//" "/"\ "}
_INFO = ${$_INFO//" "/"\\ "}
_INFO = ${$_INFO//' '/'\ '}
_INFO = ${$_INFO//' '/'\\ '}
但我不断收到“错误替换”错误。
因此,这不仅过于具体(仅处理空格)而且无论如何都不起作用。我该怎么做呢?
如果我必须使用sed
或awk
其他非 bash 脚本处理原生的东西,我宁愿得到我需要使用的确切行,因为我完全不熟悉它们。(:叹息:新手)