私は期待
compgen -A file -G './tmp/*.sh'
下のファイルのみが表示されますが、tmp/
現在のディレクトリのすべてのファイルも表示されます。
頑張りました
compgen -A file -X '!(tmp/*.sh)'
そして
compgen -A file -X "!(tmp/*.sh)"
しかし、どちらも結果が空です。設定確認:
$ shopt|grep extglob
extglob on
また注目に値する
compgen -A file tmp/*.sh
最初の有効な候補のみが返されます。ちなみに、これは基本的な行の完成の結果と正確に一致します。
cp tmp/*.sh[TAB]
そして
ls tmp/*.sh[TAB]
どちらも最初の候補にのみ拡張されます。
2つの質問:
- なぜ?
- 予想される結果を得るために使用できる方法はありますか
compgen
?
「予測結果」は、一致するすべての候補を返すことです。ls tmp/*.sh
ベストアンサー1
@KamilMaciorowskiのコメントが返信します。
私の間違いは、ファイル名を処理するときに「-Aファイル」が必要であると仮定したことです。-G 'tmp/*.sh
希望の結果を得るにはそれを使用してください。
など-A
のオプションが多く、誤った仮定が発生します。ただし、globはファイル名にのみ機能するため、ファイル名としてドメインを使用すると暗黙的です。file
host
-G