web-dev-qa-db-ja.com

Bashの単一引用符文字列で単一引用符をエスケープするにはどうすればよいですか?

このようにBashに文字列を表示したい

I'm a student

もちろん、このようにすることができます

echo "I'm a student"

しかし、文字列を一重引用符で囲んでこれを達成するにはどうすればよいですか?

61
爱国者
echo 'I\'m a student'

動作しません。ただし、次のように機能します。

echo $'I\'m a student'

Bashのmanページから:

バックスラッシュが先行する場合でも、単一引用符は単一引用符の間に出現しない場合があります。
....
$ 'string'という形式の単語は特別に扱われます。 Wordは文字列に展開され、バックスラッシュでエスケープされた文字はANSI C標準で指定されたとおりに置き換えられます。

103
codaddict

Glenn Jackmanが言及した「ugい」ソリューションは、実際にはトップレベルの回答としてリストされるべきです。それはうまく機能し、実際にはいくつかの状況で美しいです。

'I'"'"'m a student'

これは、Iの後の単一引用符付き文字列を終了し、すぐに単一引用符を含む二重引用符付き文字列を開始してから、別の単一引用符付き文字列を開始します。次に、bashは連続するすべての文字列を1つに連結します。

綺麗な!

51
Luke Gedeon

エスケープされた一重引用符\'は技術的には単一引用符で囲まれた2つの引数の間にある

echo 'I'\''m a student'
9
Nick Jensen