피쉬 쉘의 단일 환경 변수에서 여러 매개변수를 설정하고 사용하는 방법

피쉬 쉘의 단일 환경 변수에서 여러 매개변수를 설정하고 사용하는 방법

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(예를 들어 Makefile의 $(arm)에 대한 참조는 해당 내용으로 확장됩니다). 환경 변수는 스칼라이며 문자열 값만 포함할 수 있습니다. 위에서는 Split+Glob 연산자에 의존했습니다.껍데기변수를 make(인수로) 전달된 단어로 분할합니다.

그러나 $arm셸에 의해 확장되므로 해당 변수가 사용되지 않으므로 arm내보낼 환경이 필요하지 않습니다 .makemake$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

관련 정보