생선 껍질의 단일 환경 변수에 여러 매개변수를 설정하고 사용하는 방법

생선 껍질의 단일 환경 변수에 여러 매개변수를 설정하고 사용하는 방법

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내보낼 필요가 없습니다 .armmakemake$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

관련 정보