오늘은 쉘 튜토리얼을 읽고 있어요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."