シングルクォートで囲んだ中でシングルクォートを使う
シェルスクリプトの中や、コマンドプロンプトでシングルクォートで囲んだ中でシングルクォートを使うにはどうしたらいいのか?
例えば以下のようにB'zと表示しようとするとエラーになる。
> echo 'B'z' Unmatched '.
それではバックスラッシュでエスケープすると
> echo 'B\'z' Unmatched '.
やはりエラー。
エラーを回避する方法は2通り。
1.'\'をシングルクォートの前につける
> echo 'B'\''z' B'z
2.'"'"(シングル-ダブル-シングル-ダブルクォート)をシングルクォートの前につける
> echo 'B'"'"'z' B'z
理由はよくわからない。shellのquoteの処理を追うしかないんですかね。
上記の対応をすると以下のようなシェルスクリプトも動作する。
bashのシェルスクリプト中のperlのスクリプトでprint 'hello'のようなシングルクォートをつかう。
#!/bin/bash perl -e ' print '\''hello'\''; print "\n"; print '"'"'hello2'"'"'; print "\n"; '
また以下のようにすると
1 #!/bin/bash 2 3 foo="Hello world" 4 5 echo '$foo' 6 echo \'$foo\'
> ./hw.sh $foo 'Hello world'