Bash でアスタリスクを展開させないようにする

Bash のコマンド中に、アスタリスク * を「文字列」として認識させたい場合があったりする。

# 以下のような場合は「アスタリスク展開」をさせたいが…
$ cp ./* ../../dest/

# 以下のコマンドでは「アスタリスク」を文字として使いたい
$ set_char *

(set_char というコマンドは存在しないが、こういう用途があったとして…という例)

アスタリスクを展開させることを、ワイルドカード展開とか、Asterisk Expansion とか呼んだりするが、コレを無効化する方法。

シングルクォートで囲む

手っ取り早いのは、引数をシングルクォートで囲むこと。

$ set_char '*'

バックスラッシュでエスケープする

次に、バックスラッシュ文字を付与してエスケープしてやる方法。

$ set_char \*

set -fset -o noglob を指定する

set -f か、set -o noglob を実行してからコマンドを書けば、ワイルドカード展開が無効になる。

$ set -f
# もしくは
$ set -o noglob

# ワイルドカード展開されずに実行できる
$ set_char *

# 元に戻すには以下のいずれか
$ set +f
$ set +o noglob

覚えた。