쉘 명령을 직접 사용하는 것(예: foo)과 $(foo)를 사용하는 것의 차이점은 무엇입니까?

쉘 명령을 직접 사용하는 것(예: foo)과 $(foo)를 사용하는 것의 차이점은 무엇입니까?

명령을 직접 사용하는 것과 $(foo)를 사용하는 것 사이에서 혼란스럽습니다. 저는 Mac을 사용하고 있으며 brew cask(패키지 관리자)가 설치한 응용 프로그램을 나열하고 각 응용 프로그램을 에코하려고 합니다 . 두 개의 짧은 쉘 스크립트가 있는데 첫 번째 스크립트는 다음과 같습니다.

#!/bin/bash
apps=$(brew cask list)
for app in ${apps}
do
    echo  "${app}"
done

잘 작동하지만 또 다른 것은 다음과 같습니다.

#!/bin/bash
apps=$(brew cask list)
myecho=$(echo)
for app in ${apps}
do
    ${myecho}  "${app}"
done

그러면 애플리케이션 이름이 ./script2.sh: line 7: foo: command not found반환 됩니다. fooecho를 직접 사용하는 것과 별칭으로 사용하는 것의 myecho차이점은 무엇입니까 ?

답변1

이 명령에서는

myecho=$(echo)

myecho빈 토큰을 설정하고 있습니다 . 그래서 다음 명령

${myecho}  "${app}"

간단히 말해서 "${app}", 이는 분명히 "foo"입니다(예상되지 않음). 하나 만들어줄래?별명다른 구문을 사용하십시오.

alias myecho="echo"

추가 자료:

답변2

별칭을 설정하지 않았습니다. 에서는 실행 myecho=$(echo)되고 echo해당 출력(echo에는 에코할 항목이 없으므로 아무 것도 없음)이 변수에 저장됩니다 myecho. 그러나 echo의 일부 출력은 다음과 같습니다.

$ myecho=$(echo "Hello")
$ echo "$myecho"
Hello

그리고 변수는 myecho이를 저장합니다.


두 번째 스크립트에서 원하는 것은 echo변수를 사용하여 실행하는 것이라고 생각합니다 myecho. 수행 방법은 다음과 같습니다.

#!/bin/bash
apps=$(brew cask list)
myecho="echo"
for app in ${apps}
do
    ${myecho}  "${app}"
done

위의 모든 내용은 별칭과 관련이 없습니다. 별칭은 다음과 같이 정의됩니다.

alias myecho='echo'

그러나 앨리어싱을 수행하는 줄에는 다음이 포함되어서는 안 됩니다 $.

myecho "${apps}"

관련 정보