Fish Shell で単一の環境変数に複数のパラメータを設定して使用する方法

Fish Shell で単一の環境変数に複数のパラメータを設定して使用する方法

fishシェルで以下を使用したいと思います:

$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm 

これは問題なく動作しますbash/zshないシェル上fish

fishしかし、シェルで以下を実行すると:

$env tmp=arm make

これは問題なく動作します。

誰かこれを手伝ってくれませんか?

答え1

あなたが探していますset -x

set -x arm 'ARCH=arm CROSS_COMPILE=arm-eabi-'

を参照してください環境変数に関するチュートリアルセクション多くのための。

答え2

sh/ bash

export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
make $arm

あまり意味がありません。環境変数は渡される変数として意図されていますmake(したがって、たとえばMakefile内の$(arm)への参照はその内容に展開されます)。環境変数はスカラーであり、1つの文字列値のみを含めることができます。上記では、split+glob演算子に依存しています。殻の変数をmake(引数として)渡される単語に分割します。

ただし、$armはシェルによって展開されるため、その変数は使用されないためarm、 の環境にエクスポートする必要はありません。makemake$arm

また、配列をサポートするシェルでは、配列を使用する方が合理的です。/ bash/zshの場合ksh:

arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make "${arm[@]}"

fish

set arm ARCH=arm CROSS_COMPILE=arm-eabi-
make $arm

rc/ es/ zsh

arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make $arm

関連情報