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

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_2baf49f9-7742-4931-889e-3489db8f675b.png

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

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

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

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




お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


Close Menu