fish
シェルで以下を使用したいと思います。
$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm
これはbash/zsh
しかしいいえfish
シェルに。
fish
ただし、シェルで次のコマンドを実行すると:
$env tmp=arm make
これは素晴らしい作品です。
誰でもこの問題を解決するのに役立ちますか?
答え1
答え2
存在するsh
/ bash
:
export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
make $arm
本当に言わない。環境変数は渡された変数を意味しますmake
(たとえば、Makefileの$(arm)への参照はその内容に展開されます)。環境変数はスカラーであり、文字列値のみを含めることができます。上記では 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