URLは引用符で囲んで渡す必要があります。

URLは引用符で囲んで渡す必要があります。

mpvネットワークストリームとして再生するURLを渡そうとします。

bashこれは次の構文を使用して実行できます。

$ mpv http://myvideosite.com

しかし、zshURLを(おおよそ)ファイルパスとして評価したいと思います。走る

% mpv http://myvideosite.com

次のような答えを受けました:

zsh: no matches found: http://myvideosite.com

戻りコードは1です。

走る

% mpv "http://myvideosite.com"

期待通りに行われます。

zshパラメータを文字列として処理しませんか?

答え1

コマンドラインの重要な部分を誤って削除したとします。問題のURLに?文字(または*)が含まれています。シェルの特殊グローバルマッチング文字です?。ファイル名の単一文字と一致し、複数の文字と一致します。次のように言うとき:*?*zsh

zsh: no matches found: http://myvideosite.com?video=123

http://myvideosite.com?video=123現在、ディレクトリにアクセス可能なファイルがないというメッセージが表示されます。

zshでは、このような拡張失敗はデフォルトではエラーですが、Bashではそうではありません。失敗したモードは作成されたまま引数として保持されます。 zsh の動作はファイルがないため、意図したとおり秘密に実行しないコマンドを作成できないという点でより安全ですが、必要に応じて Bash 動作を持つように変更できます。

setopt nonomatch

これNOMATCHオプションはデフォルトでオンになっています。、表示されるエラーが発生します。無効にすると、setopt nonomatch失敗したグローバル拡張はコマンドラインで変更されていません。

$ echo foo?bar
zsh: no matches found: foo?bar
$ setopt nonomatch
$ echo foo?bar
foo?bar

これにより、元のユースケースが解決されます。一般に、エラーを避けるために、パラメータを特殊文字として引用することをお勧めします。つまり、ファイルがその名前で存在するか、または存在すると考えると存在しない場合があります。

関連情報