我想在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