
grep
コマンドに変数を渡すには?ハードコードされた値が動作しています。
startingLine=`grep -oP '(2017-01-03 )\w+.+' cv-batch.log | head -1`
echo $startingLine
ただし、変数を使用しようとすると動作が停止します。
currDate=$(date -d "$dataset_date" +%Y-%m-%d)
echo $currDate
startingLine=`grep -oP '($currDate )\w+.+' cv-batch.log | head -1`
編集する:以下を試しましたが、やはり動作しません。
startingLine=`grep -oP '("$currDate" )\w+.+' cv-batch.log | head -1`
答え1
変数は一重引用符で囲まれているため、「通過」されません。シェルは一重引用符内で変数拡張を実行しません。次を呼び出す前にシェルに変数の値を拡張させるには、二重引用符を使用しますgrep
。
startingLine="$( grep -oP "($currDate )\w+.+" cv-batch.log | head -1)"
ご注意ください、変える実際には「転送」されませんが、grep
ユーティリティを実行するときにシェルで使用される拡張値です。まず、トレース(set -x
)を有効にして実行時に実際に何が起こっているのかを確認してから、トレースを無効にして実行してみてくださいset +x
。
$( ... )
また、ファイル名のグロービングとトークン化に関連する問題を回避するために、より強力でより見やすいコマンド代替構文を使用し、結果の完全な文字列を引用しました。
$currDate
また、次の内容を二重引用符で囲む必要がありますecho
。
echo "$currDate"
または
printf '%s\n' "$currDate"
バラより