我想在fish
shell 中使用以下內容:
$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm
這在bash/zsh
但不是在fish
外殼上。
fish
但是如果我在shell中執行以下命令:
$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
由 shell 擴展,因此您不需要導出arm
到 的環境,make
因為make
不使用該$arm
變數。
此外,在支援它們的 shell 上,使用陣列會更有意義。在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