私は最近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
。
mapfile
ksh は ksh93t+ より前のバージョン、つまり<( ...)
プロセス置換構文をサポートしません。リダイレクト先として使用される場合、例えば<
。によって明確化されたスティーブン・チャジェラス。
bashを呼び出すようにsh-bang行を変更します(またはそのような場合は、kshの代わりにbashを明示的に呼び出します)。
また、grep
すべてのオプションの前に引数を入れるので、コマンドは文句を言います。
grep -w "${ID}" /etc/passwd
(変数拡張としても引用)