- Published on
Bashで多層シングルクォーテーションをエスケープする
- Authors
- Name
- Shou Arisaka / 有坂翔
Linuxパソコン・サーバーのコマンドライン、Bash言語で、シングルクウォートの中のシングルクウォートの中のシングルクウォートをエスケープする方法について紹介します。
bashにおいてシングルクウォートのエスケープは以下。
'\''
じゃあ、更にこの'''
で囲まれたコードのなかにシングルクウォートがある場合はどうやってエスケープすればよいのか?
'\''\'\'''\''
僕もこのようなコードを書いて、実際にシングルクウォートの中のシングルクウォートの中のシングルクウォートという状況を作り出すに至ったが、多層シングルクウォートのエスケープは予想以上に複雑であるようだ。
cd "${1}" && ls | xargs -I {} bash -c ' dirname="$( echo "{}" | awk '\''{print $10}'\'' )" ; [[ -d "${dirname}" ]] && [[ ! "${dirname}" =~ ^\.\.$ ]] && echo "{}" | awk -v dirname="${dirname}" '\''{ " du -h "dirname" | tail -1 | awk '\''\'\'''\''{ print $1 }'\''\'\'''\'' " |& getline $11 ; print $0 }'\'' ' ; cd - # great
さらに深層のシングルクウォートエスケープシーケンスを知りたい場合は以下のページと以下のスクリプトが役に立つだろう。
quotify(){
cat << 'EOT' > ${HOME}/quotify ; chmod 755 ${HOME}/quotify ; ${HOME}/quotify
#!/usr/bin/perl -pl
s/'/'\\''/g;
$_ = qq['$_'];
EOT
}