サブコマンドのシェル引数をどのようにエスケープしますか?


0

シェルスクリプトを書いているとしましょう。任意の数のコマンドライン引数を取り、それらをコマンドラインユーティリティに渡します。そのユーティリティを呼び出すときは、各引数の前にフラグを付ける必要があります。スクリプトでこれをエスケープする正しい方法は何ですか?ユーティリティはシェルスクリプトとまったく同じ文字列を見ることができますか?

具体例:に正規表現を渡しgrepます。ラッパースクリプトを実行します。

./findit.sh needle "old socks" "spare change"

そして、あなたはgrepそれらの引数をマッチ式として呼び出すことを期待しています:

grep haystack.txt -e needle -e "old socks" -e "spare change"

-e物事を複雑にしているのはプレフィックスです。不要な場合は、単に使用できます"$@"grep引数が適切にエスケープされるようにするために、スクリプトは何をする必要がありますか?これを行うポータブルな方法はありますか?

回答:


0

私はBashで動作するバージョンを持っていますが、Bash配列を使用しており、移植性がないと強く疑っています。

for arg in "$@"; do
  args+=("-e" "$arg")
done

grep haystack.txt "${args[@]}"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.