Apt-get * ZSHを使用したワイルドカード


15

ZSH:

sudo apt-get remove --purge ubuntuone-* 
ERROR: zsh: no matches found: ubuntuone-*

Bashで動作します。どうしたの ?:-D

回答:


13

はい、zshそしてbashこの点で動作が異なります。

zsh、「ubuntuone-*」と言うと、現在の作業ディレクトリ内で始まるファイルをubuntuone-探します-見つからないため、「no matches」と表示され、コマンドは実行されません。

bash別のタックを取ります-またubuntuone-、現在の作業ディレクトリで始まるファイルを探しますが、見つからない場合は、「呼び出しているプログラムはワイルドカードを処理する方法を知っているかもしれません」ubuntuone-*」をsudo apt-getリテラル引数として使用します。

現在の作業ディレクトリにというファイルがある場合ubuntuone-ffdjhjer、bashは実行しようとしますがsudo apt-get remove --purge ubuntuone-ffdjhjer、おそらく失敗します。

zsh(とでbash)あなたはのように、ワイルドカードを展開するが、それを渡すためにではないことを伝えるために、単一引用符を使用することができます。

sudo apt-get remove --purge 'ubuntuone-*'

2
その方法でzshをBashとして動作させることはできますか?
ミランダロール

わからないが、これまでに行った少しの研究では、「いいえ」が示唆されている。いずれの場合でも、シェルにワイルドカードを展開させたくない場合は、引数を単一引用符で囲むのが常に良いです(bashでもCWD内のファイルがワイルドカードと一致します。たとえばdpkg -l 'linux*'、インストールされているすべてのカーネルを表示するために、常にbashと入力します。
デビッドパーデュー

10

この答えは少し遅れているかもしれませんが、これを修正する方法があります。コマンドラインから実行:

unsetopt no_match

これは素晴らしい作品
neaumusic

またはshopt -s failglobbash修正 bashには、同じように動作してzshなど他の現代のシェルfishtcsh コマンドがまだグロブが一致しなかった場合でも実行することができることにより、Bourneシェルの設計ミスを修正したもの。
ステファンシャゼラス

@StéphaneChazelasyoda
OpenCoderX

1

zshでの展開を防ぐ別の方法があります。これは引用よりも好みです。

sudo apt-get remove --purge ubuntuone-\*
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.