小ネタ集 (Tips written in Japanese)
set -o errtrace
が無いと、関数内のエラー箇所でトラップされない。
テスト用コードはこちら。
set -e
set -o errtrace # 関数内でも trap する場合に追加
trap 'echo "Error: line $LINENO returned $?!"' ERR
false_in_func () {
echo "Before false"
false
echo "After false"
}
echo "Done"
: '
複数行のコメントはこれでも実現可能ですが、シングルクオートで挟まれたエリアはエスケープ記号も無視されるためエスケープしたとしてもシングルクオートを含められません。
ダブルクオート「"」は含められます。
'
: "
複数行のコメントはこれでも実現可能ですが、
ダブルクオートを含める際にはエスケープ「\"」が必要です。
"
: <<'COMMENT_EOF'
ここはシングルクオート「'」もダブルクオート「"」も
エスケープ無しで複数行をコメントアウトできます。
上部の COMMENT_EOF はクオートで挟んでも挟まなくてもよいですが、
下部の COMMENT_EOF はクオートしてはいけません。
COMMENT_EOF
cat <<'STD_INPUT_WITHOUT_EXPANSION_EOF'
ここから標準入力
右上のラベルをシングルクオートまたはダブルクオートで挟むと
変数やコマンド(${PWD}、`pwd`)は展開されません。
ここまで標準入力
STD_INPUT_WITHOUT_EXPANSION_EOF
cat <<STD_INPUT_WITH_EXPANSION_EOF
ここから標準入力
右上のラベルをシングルクオートで挟んでないと
変数やコマンド(${PWD}、`pwd`)は展開されます。
ここまで標準入力
STD_INPUT_WITH_EXPANSION_EOF
ちなみに、echo コマンドに渡す STRING のシングルクオート、ダブルクオート、クオート無しの違いは以下のとおり。
-e
オプションを付けてエスケープしたとしても、シングルクオートを含めることはできない。-e
オプションは合っても無くてもよい(shellによる処理のため)。-e
オプションを付けると上記以外についても「\」がエスケープ記号と解釈される。