突然*
動作が停止しました。簡単な手順:
#!/bin/bash
for f in *.txt
do
echo $f
done
*.txt
ディレクトリにファイルの代わりに文字列を生成したり、まったく生成したりしません。しかし、*
追加の文字なしでうまく動作します。何が問題なの?昨日は働いたので、これは言うまでもありません。
Bashのバージョンは4.4.12(1)リリースです。
答え1
単に、現在のディレクトリにファイル名のサフィックスがあるファイルがない.txt
場合、またはスクリプト行の末尾にキャリッジリターンなどの見えない文字がある場合です。
Windowsコンピュータでスクリプトテキストファイルを編集してDOSテキストファイルとして保存すると、キャリッジリターンが表示されることがあります。
すべての行からそれらを削除するには、dos2unix
スクリプトファイルで使用します。
どちらの場合も、一致する項目がないため、パターンは拡張されません。したがって、シェルは拡張されていないパターンのままです。
一致するファイル名がない場合にスクリプトがループを完全にスキップするようにするには、nullglob
シェルオプションを設定します。
shopt -s nullglob
これにより、bash
一致しないパターンが空の文字列に展開されます。