다음은 내 셸(zsh)에서 작동합니다.
> FOO='ls'
> $FOO
file1 file2
다음의 경우에는 그렇지 않습니다.
> FOO='emacs -nw'
> $FOO
zsh: command not found: emacs -nw
직접 호출 해도 emacs -nw
Emacs는 잘 열립니다.
왜?
답변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")
echo
ed 변수(또는 다른 방식으로 인쇄됨)도 작동합니다.
$(echo "$foo")
이러한 방법은 zsh
적어도 bash
.