내 bash에 적합한 문자열 구문을 어떻게 찾나요?

내 bash에 적합한 문자열 구문을 어떻게 찾나요?

이 별칭에 대해 오류 메시지가 나타납니다.

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 매뉴얼 페이지의 "참조" 섹션에 자세히 설명되어 있습니다.

관련 정보