![피쉬 쉘의 단일 환경 변수에서 여러 매개변수를 설정하고 사용하는 방법](https://linux55.com/image/38196/%ED%94%BC%EC%89%AC%20%EC%89%98%EC%9D%98%20%EB%8B%A8%EC%9D%BC%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B3%A0%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
fish
쉘에서 다음을 사용하고 싶습니다 .
$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm
이것은 bash/zsh
그러나아니요fish
껍질 에 .
fish
그러나 쉘에서 다음 명령을 실행하면:
$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
셸에 의해 확장되므로 해당 변수가 사용되지 않으므로 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