コマンド値を変数に保存しようとしてエラーが発生します。
var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'`
それは私にエラーを与える
var: command not found
答え1
=
はい、変数の割り当てではシェルからスペースで囲むことができないため、エラーが発生します。シェルは、var
引数=
とコマンド置換が返すすべてを使用して呼び出したコマンドを実行したいので、その行を解釈します(さらに結果を単語に分割し、引用符が付けられていないため、その単語にファイル名のグロービングを適用しました。後)。
代わりに
var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )
私はまた、アンを自由に削除grep
し、cat
バックティックを使用して廃止されたコマンドの置き換えをバックティックを使用するように変更しました$( ... )
。
grep
、およびを使用してcut
これを行うこともできますhead
。
var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )
または、特定の回数が一致した後に停止することを選択grep
できる場合:-m
var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )
または、検索している式が実際に正規表現ではない文字列の場合:
var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )