如何转义子命令的 shell 参数?

如何转义子命令的 shell 参数?

假设您正在编写一个 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[@]}"

相关内容