따옴표를 피하려고

따옴표를 피하려고

내 스크립트에서 이 줄을 인쇄하기 위해 여러 가지 방법을 시도했습니다.

alias myname='export PATH="/path/to/bin:$PATH"'

그들은 모두 다른 문제를 가지고 있습니다.

나의 마지막 시도(기억하세요!)는 다음과 같습니다:

printf '%s' '%s\n' 'alias myname=' ''\'"export PATH=\"/path/to/bin:$PATH\"" \'''  >> ~/.bashrc

하지만 작동하지 않습니다. PATH 디렉토리를 여러 번 인쇄하고 alias myname앞에%sn

(나는 printf를 사용하는 것을 선호한다)

답변1

질문을 올바르게 이해했다면 다음 줄을 추가하려고합니다.

alias myname='export PATH="/path/to/bin:$PATH"'

~/.bashrc당신의 파일 에

echo$PATH가 잘못된 시간에 확장되었기 때문에 명백한 유형이 실패합니다.

대신에 몇 가지 참조 혼합을 수행해야 합니다.

echo "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

이제 어떤 이유에서든 를 사용하고 싶다고 말씀하셨습니다 printf. 그러면 다음과 같이 할 수 있습니다.

printf "%s\n" "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

=양쪽을 별도의 문자열 로 처리하려면 다음을 수행하십시오 .

printf "%s=%s\n" "alias myname" "'export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

등.

( printf형식 매개변수만 취하고 그 뒤에 값 목록이 옵니다.)

답변2

두 가지 간단한 해결책이 있습니다. 하나는 사용하는 것입니다.여기 문서따옴표 대신. 여기 문서 내의 변수 및 명령 대체는 섹션 에 인용 문자가 포함된 문서 여기 인용 양식을 사용 <<EOF하여 끌 수 있습니다 .

cat <<\EOF >>~/.bashrc
alias myname='export PATH="/path/to/bin:$PATH"'
EOF

또 다른 방법은 인쇄하려는 문자열 주위에 작은따옴표를 사용하는 것입니다. '\''작은 따옴표 리터럴을 끝내고, 작은 따옴표 리터럴을 추가하고, 새 작은 따옴표 리터럴을 시작하려면 —를 사용하여 작은 따옴표 리터럴 내에서 작은 따옴표를 효과적으로 이스케이프 할 수 있습니다 .

echo 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

(마지막 빈 문자열 리터럴을 최적화할 수 있습니다 ''.)

일부 쉘에서는 echo명령이 인수를 문자 그대로 인쇄하지 않으므로 문자열을 인쇄하는 안정적인 방법은 다음을 사용하는 것입니다 printf.

printf '%s\n' 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

이 특별한 경우에는 echo수행하는 유일한 확장이 백슬래시와 선행을 포함하기 때문에 작동합니다 -.

관련 정보