如何在fish shell中的单个环境变量中设置和使用多个参数

如何在fish shell中的单个环境变量中设置和使用多个参数

我想在fishshell 中使用以下内容:

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

这在bash/zsh不是fish外壳上。

fish但是如果我在shell中执行以下命令:

$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) 的引用会扩展到其内容)。环境变量是标量,它们只能包含一个字符串值。上面您依赖于 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

相关内容