명령은 bash 쉘에서는 작동하지만 별칭에서는 작동하지 않습니다.

명령은 bash 쉘에서는 작동하지만 별칭에서는 작동하지 않습니다.

다음과 같은 명령을 실행하고 있습니다.

submit -n 72 -x '--mail-type=END -N2'

이 명령은 작동합니다. 그러나 별칭으로 설정하면 다음과 같습니다.

alias foo='submit -n 72 -x '--mail-type=END -N2''

오류로 인해 실패합니다.

bash: alias: -N2: not found

그러나 이 별칭은 잘 작동합니다.

alias foo='submit -n 72 -x '-N2''

따라서 --mail-type=END 조각에 관한 특정 사항이 문제를 일으킵니다.

편집: alias='...를 alias foo='...로 변경했습니다.

답변1

제안이 종료되었습니다. 대신 ""에 to contain을 사용해 보세요 ''. ( 원할 수도 있고 원치 않을 수도 있는 ""보간법을 사용하더라도)$variables

alias="submit -n 72 -x '--mail-type=END -N2'"

또는 '\''"현재 작은따옴표 종료, 리터럴 따옴표 삽입, 현재 작은따옴표 다시 시작" 트릭을 사용하세요. 즉, 내부의 모든 것이 '다음으로 대체됩니다.'\''

alias='submit -n 72 -x '\''--mail-type=END -N2'\'''

인용문이 귀하와 같은 두 단어가 아닌 하나의 완전한 문자열을 생성하는지 확인하는 방법은 다음과 같습니다.

# not ok, two distinct words
$ perl -E 'say for @ARGV' 'submit -n 72 -x '--mail-type=END -N2''
submit -n 72 -x --mail-type=END
-N2

# ok, a single string
$ perl -E 'say for @ARGV' 'submit -n 72 -x '-N2''                
submit -n 72 -x -N2
$ 

# ok, single quotes within doubles
$ perl -E 'say for @ARGV' "submit -n 72 -x '--mail-type=END -N2'"
submit -n 72 -x '--mail-type=END -N2'

# ok, '\'' trick
$ perl -E 'say for @ARGV' 'submit -n 72 -x '\''--mail-type=END -N2'\'''
submit -n 72 -x '--mail-type=END -N2'
$ 

에 관해서는 foo='submit -n 72 -x '-N2'', 그것은아니요UNIX의 중첩된 참조원하지 않는다중첩. 이는 쉘이 $(cmd ... $(cmd ...))역따옴표만 사용하여 중첩하는 방법을 알아내려고 시도하지 않는 이유입니다. foo='submit -n 72 -x '-N2''는 더 길고 복잡하게 표현 foo='submit -n 72 -x '-N2하거나 더 간단하게 표현합니다 foo='submit -n 72 -x -N2'.

답변2

따옴표를 중첩할 수 없습니다. 간단한 해결 방법은 다른 따옴표를 사용하는 것입니다.

alias foo='submit -n 72 -x "--mail-type=END -N2"'

더 나은 해결책은 별칭을 사용하지 않는 것입니다. 대신 함수를 사용하세요.

foo () {
    submit -n 72 -x '--mail-type=END -N2' "$@"
}

관련 정보