다음과 같은 명령을 실행하고 있습니다.
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' "$@"
}