
今日はシェルチュートリアルを読んでいます。http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
それは述べた:
出力したい文字列に一重引用符が表示されている場合は、文字列全体を一重引用符で囲まないでください。
echo 'It\'s Shell Programming'
Centosサーバーでこれを試しましたが、うまくいかなかったので、>
より多くの入力を要求しました。
\
2つの一重引用符はすべての特殊文字をエスケープ文字を含みますが、自分を除外する一般文字に変換するため、一重引用符構文'
内で
一重引用符をどのように表現するのか疑問に思います。'
答え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
答え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
シェルを安全にするために、1行に1つの値行を引用します。
シェルに応じて、次のことを選択することもできます。
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."