명령을 직접 사용하는 것과 $(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
반환 됩니다. foo
echo를 직접 사용하는 것과 별칭으로 사용하는 것의 myecho
차이점은 무엇입니까 ?
답변1
이 명령에서는
myecho=$(echo)
myecho
빈 토큰을 설정하고 있습니다 . 그래서 다음 명령
${myecho} "${app}"
간단히 말해서 "${app}"
, 이는 분명히 "foo"입니다(예상되지 않음). 하나 만들어줄래?별명다른 구문을 사용하십시오.
alias myecho="echo"
추가 자료:
- 2.3.1 별칭 대체(POSIX)
- 2.6.3 명령 대체(POSIX,
$(
사용법 설명)
답변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}"