쉘 변수에 저장된 명령 실행

쉘 변수에 저장된 명령 실행

다음은 내 셸(zsh)에서 작동합니다.

> FOO='ls'
> $FOO
file1 file2

다음의 경우에는 그렇지 않습니다.

> FOO='emacs -nw'
> $FOO
zsh: command not found: emacs -nw

직접 호출 해도 emacs -nwEmacs는 잘 열립니다.

왜?

답변1

라는 명령이 없기 때문입니다 emacs -nw. 옵션을 emacs전달할 수 있는 호출된 명령이 있습니다 -nw.

명령을 저장하려면 다음을 사용하는 것이 일반적입니다.기능:

foo() emacs -nw "$@"
foo ...

여러 매개변수를 저장하려면 일반적으로 배열이 사용됩니다.

foo=(emacs -nw)
$foo ...

공백으로 구분된 여러 단어가 포함된 문자열을 저장하고 공백으로 분할하려면 다음을 수행할 수 있습니다.

foo='emacs -nw'
${(s: :)foo} ...

IFS에서 수행되는 토큰화를 사용할 수 있습니다(IFS에는 기본적으로 공백, 탭, 줄 바꿈 및 nul이 포함됨).

foo='emacs -nw'
$=foo ...

답변2

미래의 독자들을 위해 이와 같은 작업을 수행하는 "표준" 방법은 변수에 저장된 매개변수를 평가하는 것임을 언급해야 합니다 eval.

eval "$foo"

명령 대체를 통해 표현식을 평가할 수도 있습니다.

$(expr "$foo")

echoed 변수(또는 다른 방식으로 인쇄됨)도 작동합니다.

$(echo "$foo")

이러한 방법은 zsh적어도 bash.

관련 정보