*
Bashスクリプトのディレクトリパスの末尾にある文字に問題があります。
一部のアーカイブが十分に古い場合、サーバーから自動的に削除するスクリプトがあります。スクリプトはAマシンにあり、Bマシンで実行する必要があります。私はssh
両方のコンピュータにリモートでアクセスします(Sudoは不要で、一般ユーザーのみが利用できます)。このスクリプトのルールの一つはdirA/dirB/dirC/dirD/dirE*
。
しかし、その位置には何もないdirE
ので、どの変数を表すものだと推測します*
。これが私が知りたいことです。*
ディレクトリパスの終わりは何を意味し、スクリプトは何をしますか?
答え1
ここで、*
「ワイルドカード」とは、「0個以上の文字と一致」を意味します。これを説明するために、次のディレクトリを検討してください。
$ ls
dirA dire dirE dirEa dirEEE
$ echo dirE*
dirE dirEa dirEEE
上記のように、globはdirE*
一致しますdirE
が、dirEa
orはdirEEE
一致しません(*nixシステムは大文字と小文字を区別します)。dirA
dire
したがって、スクリプトでは、これは名前dirA/dirB/dirC/dirD/
で始まるという意味ですdirE
。
答え2
他の理由で、このQ&Aに参加している人のためにここにメモを追加します。
ファイル名の末尾にaが表示されている場合(実際はありますが、時には(または組み込み関数)、または完了出力に表示されることがあります)、*
これはまったく異なります。ls
ls -F
ls
ls -F
ls-F
tcsh
zsh
tcsh
この-F
オプションを使用すると、ls
項目の末尾に末尾の文字を追加できます。特別な識別を支援するためのファイル名詳細。ファイル名のリストが完了したら、同じことを行いますzsh
。tcsh
あなたが見るなら:
$ ls -F
dir/ fifo| file link@ ls* socket=
これらは/
、ファイル名の一部ではありませんが(誰かがユーザーをだまそうとする場合かもしれません)、|
以下を知らせるために追加されます。*
=
ls
dir
ディレクトリ(/
)です。fifo
名前付きパイプ/FIFO(|
)。link
シンボリックリンク(@
)です。ls
実行可能な一般ファイルです(*
)。(該当する権限には少なくとも1つの実行ビットがあります)socket
Unix ドメインソケットです(=
)。
一部のls
実装(およびzsh
完成)は、さまざまなオプションをサポートする端末の色で区別することもできます。