как задать и использовать несколько параметров в одной переменной среды в оболочке рыбы

как задать и использовать несколько параметров в одной переменной среды в оболочке рыбы

Я хочу использовать в 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 (например, ссылка на $(arm) в Makefile расширяется до его содержимого). Переменные окружения являются скалярными, они могут содержать только одно строковое значение. Выше вы полагаетесь на оператор 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

Связанный контент