質問: いつもお世話になっています。 現在、業務で緊急で必要となるシェルスクリプトを作成しております。 当シェルスクリプトですが、引数にエスケープ文字を含むものとなっており、 *(アスタリスク)を引数に含むケースで、うまくいきません。 シェルスクリプトの内容と実行結果を以下に掲載しますので、 どなたか詳しい方、ご教授いただけますでしょうか。よろしくお願いします。 以下、作ったシェルスクリプトです (説明のため簡略化してあります) bulkUpdateSchecule.sh ``` for file in `ls`; do tdUpdate="td sched:update ${file} -s \"$1\" -d sample_db -t 'Asia/Tokyo' -T presto" echo ${tdUpdate} done ``` 以下、実行例です (crontabコマンドの引数と同じ形式で、スケジュール日時を渡すスクリプトとなっています) ``` sudo sh sample.sh "59 * * * *" ``` 上記スクリプトを実行しますと、アスタリスクの部分に、変数fileの内容が格納されてしまいます。 「呼び出し側でアスタリスクをエスケープしてみる」「シェルスクリプト内で置換処理を埋め込む」などしましたが、どうもうまくいきません...。
回答: `echo ${tdUpdate}` で「*」が展開されているのではないでしょうか。 `echo "${tdUpdate}"` と変数を「"」ダブルクォートでくくるとどうですか?