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
、 の環境にエクスポートする必要はありません。make
make
$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