ワイルドカードの操作が停止しました。

ワイルドカードの操作が停止しました。

突然*動作が停止しました。簡単な手順:

#!/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一致しないパターンが空の文字列に展開されます。

おすすめ記事