GREPを使用してファイルからテキストを抽出して配列に保存するBash構文

GREPを使用してファイルからテキストを抽出して配列に保存するBash構文

私は最近bash 4.2.46アップグレードしましたbash version 4.2.50

次の行を含むスクリプトがあります。

mapfile -t my_array < <(grep ${ID} -w /etc/passwd | cut -d ":" -f 1,4,5)

ここで、IDはファイル内で検索し、passwdすべての結果を配列にロードしたい整数です。

以前は動作していましたが、今はエラーが発生します。

usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
        [-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
        -f pattern_file... [file...]

この減価償却問題を解決する方法を説明できる人はいますか?を使ってみましたsedが、awk出力リダイレクト形式に問題があるようです。

テキストファイルはpasswd次のとおりです name:garbageData:garbageData:ID:password

答え1

bashの代わりにkshを使用してスクリプトを実行すると、sh-bangヘッダー行がkshを誤って指すか、/ bin / sh(AIXの場合はksh)を指すか、明示的に呼び出すとエラーが発生しますksh /the/script

mapfileksh は ksh93t+ より前のバージョン、つまり<( ...)プロセス置換構文をサポートしません。リダイレクト先として使用される場合、例えば<。によって明確化されたスティーブン・チャジェラス

bashを呼び出すようにsh-bang行を変更します(またはそのような場合は、kshの代わりにbashを明示的に呼び出します)。

また、grepすべてのオプションの前に引数を入れるので、コマンドは文句を言います。

grep -w "${ID}" /etc/passwd

(変数拡張としても引用)

関連情報