셸에서 특수 문자를 감싸기 위해 작은따옴표를 사용할 때 '작은따옴표'를 어떻게 에코하나요?

셸에서 특수 문자를 감싸기 위해 작은따옴표를 사용할 때 '작은따옴표'를 어떻게 에코하나요?

오늘은 쉘 튜토리얼을 읽고 있어요http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm

그것은 언급했다:

출력하려는 ​​문자열에 작은따옴표가 나타나는 경우 전체 문자열을 작은따옴표 안에 넣지 말고 아래와 같이 앞에 백슬래시()를 사용하십시오.

echo 'It\'s Shell Programming'

Centos 서버에서 이것을 시도했지만 작동하지 않아 >더 많은 입력을 요청했습니다.

\두 개의 작은따옴표가 모든 특수 문자를 이스케이프 문자를 포함 하지만 자신을 제외하는 일반 문자로 변환하기 때문에 '작은따옴표 구문 내에서
작은따옴표를 어떻게 표현 해야 하는지 궁금합니다 .'

답변1

튜토리얼이 잘못되었습니다.

POSIX설명하다:

작은따옴표 안에는 작은따옴표가 포함될 수 없습니다.

다음은 몇 가지 대안입니다.

echo $'It\'s Shell Programming'  # ksh, bash, and zsh only, does not expand variables
echo "It's Shell Programming"   # all shells, expands variables
echo 'It'\''s Shell Programming' # all shells, single quote is outside the quotes
echo 'It'"'"'s Shell Programming' # all shells, single quote is inside double quotes

추가 자료:소개 - Greg Wikipedia

답변2

이는 다른 사람이 파일에 작은따옴표와 큰따옴표를 혼합하여 넣은 경우에도 작동합니다.

cat > its-shell-programing.txt << __EOF__
echo $'It\'s Shell Programming'
echo "It's Shell Programming"
echo 'It'\''s Shell Programming'
echo 'It'"'"'s Shell Programming'
__EOF__

쉘이 변수로 처리할 수 있는 모든 항목은 백슬래시로 이스케이프되어야 합니다.

cat >> its-shell-programing.txt << __EOF__
echo \$It\'s Shell Programming
__EOF__

답변3

당신은 그것을 사용할 수 있습니다 :

sed "s/'"'/&\\&&/g
     s/.*/'"'&'"'/
' <<IN
$arbitrary_value
IN

쉘 안전을 위해 한 줄에 하나의 값 라인을 인용하십시오.

셸에 따라 다음을 수행하도록 선택할 수도 있습니다.

printf %q\\n "$arbitrary_value"

나는 보통 이렇게 하는 것을 선호하지만:

a=$(alias "a=$arbitrary_value" a); a=${a#*=}

보다 수동적인 접근 방식은 다음과 같습니다.

sq(){ set \' "$1"
      while case $2 in (*\'*) :;;
      (*) ! RETURN="$1$2'"     ;;esac
      do  set "$1${2%%\'*}'\''" "${2#*\'}"
      done
}

...적어도 포크가 없습니다.

답변4

echo "He said to me, \"I've seen that.\""

제 생각에는 이것이 텍스트를 반환하는 가장 간단한 방법입니다.

He said to me, "I've seen that."

관련 정보