二重引用符は何ですか?私のコードで使用できますか?

二重引用符は何ですか?私のコードで使用できますか?

何とか二重引用符が私のコードに入り、予期しない動作が発生しました。

#!/bin/sh

if [ foo = ‘foo’ ]; then
   echo yes
else
   echo no
fi

私はこれがyesで鳴ると予想しましたが、実際にはnoで鳴り響きました。

ベストアンサー1

組版には改行引用符または「丸引用符」が使用され、「真の引用符」は、さまざまなワードプロセッシングプログラムによって自動的に丸引用符に変更されることがよくあります。引用されたテキストの向きを指定して乾燥するのはかなりインテリジェントなので、「スマート引用符」とも呼ばれます。

以下には、さまざまな引用符を含む表があります。

特徴 説明する Windows/Unix アップルシステム ハイパーテキストマークアップ言語
' 直接一重引用符 ' ' '
まっすぐな二重引用符 " " "
' 一重引用符を開く alt+0145 option+] ‘
' 一重引用符で終わる alt+0146 option+ shift+] ’
二重引用符を開く alt+0147 option+[ “
二重引用符の終わり alt+0148 option+ shift+[ ”

ただし、プログラミング言語では、これらの引用符を入れ替えて使用することはできません。まっすぐな引用符は通常、言語で特定の機能を実行する特殊文字ですが、同様に見える丸い引用符は特別と見なされません。代わりにエラーが発生したり、文字に似た一般的な文字として扱われることがあります。

したがって、この質問のコード例では、二重引用符はシェルエスケープ文字だけでなくリテラル文字として扱われるため、'foo'一致しません。'‘foo’'

この問題を回避するには、コード編集用に設計されたプログラムでのみコードを編集する必要があり、ワードプロセッシングアプリケーション(LibreOffice Word、WordPad、Emailなど)、PDF文書、またはオンラインコードソースからコードをコピーするときは注意が必要です。

丸い引用符とまっすぐな引用符の視覚的な違いは微妙かもしれませんが、一般的に区別することができます。丸い引用符は通常、フォントに応じて傾いているか、小さな6または9に似ています。

同様の手順をod使用して、通常のASCIIストレート引用符とUnicode丸引用符を区別できます。たとえば、次のテキストファイルには“foo”1行に二重引用符があり、"foo"別の行には真の引用符があります。 UTF-8ロケールでは、macOSとGNU / Linuxの出力はod -c二重引用符が多いバイトを占めますが、まっすぐな引用符は多くのバイトを取得します。 1バイトのみ使用してください。

mac$ od -c test.txt
0000000    “  **  **   f   o   o   ”  **  **  \n   "   f   o   o   "  \n
0000020

gnu$ od -c test.txt
0000000 342 200 234   f   o   o 342 200 235  \n   "   f   o   o   "  \n
0000020

(上の画像では、macOSはod最初の位置に文字全体を表示し、文字の残りのバイトを表示します**が、下の画像では、GNUはod文字のすべてのバイト値を8進数で表示します。)

おすすめ記事