質問: zshでスペースを含む環境変数を正しくエクスポートする方法 スペースを含む環境変数を~/.zshrcに追加しますexport skip="-dskip1 -dskip2" export skip_no_spaces="-dskip3" それを使ってみてくださいset -x mvn $skip $skip_no_spaces 実行されているコマンドは実際には + -zsh:108> mvn '-dskip1 -dskip2' -dskip3 スペースを含む変数のみが引用されます。追加される単一引用符を回避する方法は?引用/エスケープをまったく使用しない場合、シェルを開くときにエラーが発生します。 /.zshrc:export:11:このコンテキストでは無効です:-dskip2
回答: ここで環境変数を悪用していると思います。そのスペースは変数の一部であり、$を使用してパラメーター拡張を実行しているときは、そのスペースをコマンドに渡すだけです。 mvnは1つの引数、つまり変数の内容を取得します。kamil maciorowskiがコメントで正しく観察するように、これはzshに固有です。あなたが提案していることは、引用符を省いた場合、bashで機能します:bash-5.0$ export test="foo bar" bash-5.0$ ls $test ls: bar: no such file or directory ls: foo: no such file or directory bash-5.0$ ls "$test" ls: foo bar: no such file or directory グローバルエイリアス (bashではなくzshの機能でもあります)を使用すると、行のどこにでも置き換えることができます。それはそのスペースを保ちます:$ alias -g skip="-dskip1 -dskip2" $ alias -g skip2="-dskip3" $ mvn skip skip2 これにより、追加された場所に文字列が「追加」されます。