![如何转义子命令的 shell 参数?](https://linux22.com/image/1536404/%E5%A6%82%E4%BD%95%E8%BD%AC%E4%B9%89%E5%AD%90%E5%91%BD%E4%BB%A4%E7%9A%84%20shell%20%E5%8F%82%E6%95%B0%EF%BC%9F.png)
假设您正在编写一个 shell 脚本。它接受任意数量的命令行参数并将它们传递给命令行实用程序。调用该实用程序时,每个参数都需要以标志作为前缀。在脚本中转义此标志的正确方法是什么,以便实用程序看到与 shell 脚本完全相同的字符串?
具体示例:将正则表达式传递给grep
。运行包装器脚本:
./findit.sh needle "old socks" "spare change"
并且您希望grep
使用这些参数作为匹配表达式来调用:
grep haystack.txt -e needle -e "old socks" -e "spare change"
前缀-e
使事情变得复杂;如果没有必要,你可以只使用"$@"
。你的脚本需要做什么来确保grep
正确转义其参数?有没有一种可移植的方法来做到这一点?
答案1
我有一个 Bash 中的工作版本,但它使用 Bash 数组,而且我强烈怀疑它是不可移植的:
for arg in "$@"; do
args+=("-e" "$arg")
done
grep haystack.txt "${args[@]}"