出力が異なるのはなぜですか?
touch a aa bb ccc
echo *
a aa bb ccc // 分かりました、*は0回以上一致することを意味します
*
aa bb ccc // 混乱しています。
echo ?
いいよ
?
a aa bb ccc // また混乱しました。
*?
aa bb ccc // 非常に混乱している
* *
a aa aa bb bb ccc ccc // とてもとても混乱しています
echo を使う場合と使わない場合の違いは何だろうと思います。
答え1
記述する各行には、通常は最初の単語としてコマンドが必要です。
何かを印刷する場合の一般的なコマンドは ですecho
。
pwd (現在の作業ディレクトリ) にファイルa
、aa
、bb
、 がccc
ある場合
、このコマンドはディレクトリ内のすべてのファイルを出力します。
$ echo *
a aa bb ccc
このコマンドは、pwd 内の 1 つの文字を持つすべてのファイルを出力します。
$ echo ?
a
ただし、コマンドを指定しない場合は、最初の「単語」(ほとんどの場合、最初の空白まで)がコマンドとして扱われます。
アスタリスクのみを指定した場合*
、アスタリスクの展開によって得られる最初の単語が実行するコマンドとして使用されます。
コマンドがa
存在しない場合は、エラーが出力されます。
$ *
bash: a: command not found
というコマンドがある場合a
、そのコマンドは 3 つの引数とともに呼び出されますaa bb ccc
。
これ以上の詳細が提供されていないため、その名前でどのコマンドが実行されているかを推測することしかできませんa
(デフォルトのコマンドではありません)。また、どのシェルを使用しているかもわかりません。
しかし、あなたの例はすべて、最初のものa
が欠けていることを示しています。
$ *
aa bb ccc ### missing first `a`.
$ *?
aa bb ccc ### missing first `a`.
$ * *
a aa aa bb bb ccc ccc ### missing first `a`.
を除いて:
$ ?
a aa bb ccc
コマンドが何であるかがわからないため、結論を出すのは困難ですa
。