`compgen -A file -G'./tmp/*.sh` は予期せず、./ ディレクトリ内のすべてのファイルと必須ファイルを表示します。

`compgen -A file -G'./tmp/*.sh` は予期せず、./ ディレクトリ内のすべてのファイルと必須ファイルを表示します。

私は期待

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つの質問:

  1. なぜ?
  2. 予想される結果を得るために使用できる方法はありますかcompgen

「予測結果」は、一致するすべての候補を返すことです。ls tmp/*.sh

ベストアンサー1

@KamilMaciorowskiのコメントが返信します。

私の間違いは、ファイル名を処理するときに「-Aファイル」が必要であると仮定したことです。-G 'tmp/*.sh希望の結果を得るにはそれを使用してください。

など-Aのオプションが多く、誤った仮定が発生します。ただし、globはファイル名にのみ機能するため、ファイル名としてドメインを使用すると暗黙的です。filehost-G

おすすめ記事