Bash エクスクラメーション 無効化

Bash エクスクラメーション(!)を無効にする

Linuxパソコン・サーバーのBash言語において、コマンド、特殊文字として認識されてしまうエクスクラメーション(!)、つまり"ビックリマーク""びっくり記号"を無効化する方法について紹介します。以前エクスクラメーションのエスケープについて書きました。単純なケースでは上記の方法はうまくいくのですが、クウォートで囲まれていたりするとエラーになります。

Shou Arisaka
1 分で読める
2019年9月27日

Linuxパソコン・サーバーのBash言語において、コマンド、特殊文字として認識されてしまうエクスクラメーション(!)、つまり”ビックリマーク""びっくり記号”を無効化する方法について紹介します。

以前エクスクラメーションのエスケープについて書きました。

Bashで!(エクスクラメーション)をエスケープするには

単純なケースでは上記の方法はうまくいくのですが、クウォートで囲まれていたりするとエラーになります。

以下はエスケープできるケース

xsv select '!path' -d "\t" - <<< "$( awk '{print NR "\t" $s}' <<< "$( data-music-csv | removeEmptyLines )" )" | xsv sort --select rate -N -R | xsv search --select genre "${2:-".*"}" | xsv table | shuf | tail -1 | awk 1

以下はエラーになるケース

id="$( xsv select '!path' -d "\t" - <<< "$( awk '{print NR "\t" $s}' <<< "$( data-music-csv | removeEmptyLines )" )" | xsv sort --select rate -N -R | xsv search --select genre "${2:-".*"}" | xsv table | shuf | tail -1 | awk 1 )"

僕もどうやってこれをエスケープするのか全くわからないので、いっそ無効にしてしまいましょう。

set +H

Image

$ : !music
: music-random
$ set +H
$ : !music
$

これで!コマンドが使えなくなりました。普段常用してるから使えなくなるのは困るという場合はset -Hで戻せばいいですね。

以下でも書かれていますが、やっぱり!ってこわいですよね。rm -rf .とかが!rで実行されてしまうわけですから、危険すぎる。

quoting - Can’t use exclamation mark (!) in bash? - Unix & Linux Stack Exchange

この記事をシェア

Shou Arisaka 2019年9月27日

🔗 リンクをコピー