ルギア君の戯言

雑多な記事。

bash で ! を含むファイル名を指定する

ディアルガ「なんでそんなわざわざ変な名前つけたんだ?」
ルギア君「Windows のファイルシステムだったから・・・」
ディアルガ「・・・」
ルギア君「じゃあ、bash での指定方法いくね。」

ここでは例として "OhMyGod!.wmv" を ffplay で再生してみよう。

$ ffplay "OhMyGod!.wmv"

bash: !.wmv": event not found

と叱られます。
そう、! は、過去のコマンドを参照する命令で "" の中にあっても作用してしまう、ちょっと厄介者です。

$ ls
$ !l

を実行すると、2回目は ls が実行されます。
! のあとに付いている l は「l で始まる」という意味です。

$ !!

は最後に実行したコマンドを実行します。

$ ! 1

を実行すると・・・

bash: 1: command not found

(1 というコマンドがあれば別ですが)と、出ますね!
っていうと ! は無視しましたね。ということでこの技法が使えるのです。


でも、

$ ffplay "OhMyGod! .wmv"

とすると、ffplay は "OhMyGod! .wmv" は見付かりません。
というふうに怒ってしまいます。


ですから、スペースは詰めなければいけないのです。


そこで、printf コマンドが使えるのです。

$ ffplay `printf %s%s OhMyGod! .wmv`

ということです。
やっかいですね(ぁ


やっぱり、! は使わないようにしたほうがいいですね(ぁ


【追記】

! は \ でエスケープすれば回避できます.
つまり,

$ ffplay OhMyGod\!.wmv

で OK です.