이 별칭에 대해 오류 메시지가 나타납니다.
alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''
오류 메시지는 다음과 같습니다.
-bash: .bashrc: line 15: syntax error near unexpected token `('
-bash: .bashrc: line 15: `alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'''
별칭이 많이 있는데 이 메시지를 이해할 수 없습니다!저는 문자열 구문에 대한 다양한 조언을 제공하는 많은 웹사이트를 찾았습니다.
저는 OS X Mavericks(10.9.3)를 사용하고 있습니다.
내 질문은 다음과 같습니다
내 bash 버전을 찾고 버전에 따라 내 bash 파일의 올바른 구문을 결정하려면 어떻게 해야 합니까?
답변1
bash --version
alias ejectall=$'osascript -e \'tell application "Finder" to eject (every disk whose ejectable is true)'\'
답변2
문제는 참조에 있습니다. 어떤 버전의 bash를 가지고 있는지는 중요하지 않습니다(실행하거나 알아낼 수는 있지만 bash --version
) echo "$BASH_VERSION"
. 이러한 인용 규칙은 변경되지 않았습니다.
'
- 견적은 간단합니다. 그들은 단지 다음 것까지 인용합니다 '
. 따라서 귀하의 예에서는 다음과 같습니다.
alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''
^ ^
start end
즉, "tell application"으로 시작하는 모든 항목은 셸을 참조하지 않습니다.
다음을 수행할 수 있습니다.
alias ejectall='osascript -e '\''tell application "Finder" to eject (every disk whose ejectable is true)'\'
기본적으로 따옴표 붙은 문자열을 끝내고 작은따옴표( \'
)를 넣은 다음 새 따옴표 붙은 문자열을 시작합니다. 공백이 없으므로 인접한 인용 문자열이 함께 병합됩니다. 너는 볼 수있어:
$ echo 'I'\''ll work'
I'll work
다른 옵션은 -quotes를 사용하는 것입니다 "
. 그런 다음 다른 큰따옴표를 로 이스케이프 \"
하고 달러 기호를 로 이스케이프 해야 합니다 \$
.
$ echo "That \"is\" \$3.00."
That "is" $3.00.
또는 Hauke Laging이 답변에서 지적했듯이 Bash의 $'
-strings를 사용할 수 있습니다. 이를 통해 '' 문자열 내에서 \'
.
이 모든 내용은 bash 매뉴얼 페이지의 "참조" 섹션에 자세히 설명되어 있습니다.