POSIXシェルで不明な数の引数を使用してコマンドを実行するにはどうすればよいですか?

POSIXシェルで不明な数の引数を使用してコマンドを実行するにはどうすればよいですか?

現在のディレクトリから複数の単語を検索したいと思います。これを達成するために、私はこのようなものを使用します。

grep -e "word1" -e "word2" -R .

これは素晴らしい作品です。

grepさらに一歩進んで、改行文字のすべての単語を含む辞書ファイルを作成し、その辞書を使用してコマンドを生成したかったです。

たとえば、次の辞書ファイルがあります。

one
two
three
more

このコマンドを作成したいと思います。

grep -e "one" -e "two" -e "three" -e "more" -R .

私はこれがbash次のような配列から成ることができることを知っています。

pattern=()
while IFS= read -r line; do
    pattern+=("-e" "$line")
done < "$dictionary"

grep "${pattern[@]}" -R .

しかし、POSIX専用のシェルを使ってこれを行うには?

grep文字列をコマンドで生成し、 を使用して実行できることを知っていますが、eval辞書ファイルは何でも構いません。これは安全ではないようです。

  • どのような解決策がありますかeval
  • 「安全な」解決策はありますか eval

ベストアンサー1

grep付属-fまたは-Fスイッチを使用したくないですかgrepgrepマニュアルページから:

   -F, --fixed-strings
        Interpret PATTERN as a list of fixed strings, separated by 
        newlines, any of which is to be matched.  (-F is specified by 
        POSIX.)

   -f FILE, --file=FILE
        Obtain patterns from FILE, one per line.  The empty file contains 
        zero patterns, and therefore matches nothing.  (-f is specified by
        POSIX.)

はい

$ grep -F somefile.txt -R .

おすすめ記事