DOSEIの日記

技術メモ+日常ログ

エイリアスを回避する方法の根拠

多くの人は、 ls にはエイリアスを張っていると思うが(この根拠は無い)、それを回避して、ピュアな ls を実行したいことがある。その場合、以下のようにすれば可能。

\ls       # バックスラッシュをつける

さて、なぜこれでそういうことができるのか、 bash のマニュアルを調べてみる。 alias の項には説明が無い。シェルの文法の項にも無い。 avoid とか disable とかで検索しても見つからない。

答えは、 "Quoting" のところにのっている。クオートには、

  • シングルクオート (')
  • ダブルクオート (")
  • エスケープ文字 (\)

があり、 bashコマンドラインではバックスラッシュは改行以外のすべて文字をその文字のままに保持する機能がある。つまり、 \ls は、 l が保持されるため、結果的に alias によって展開されるのを抑制したことになる。したがって、以下のようにかいてもいい (alias は展開されない)

l\s
\l\s

ダブルクオートもシングルクオートも文字を保持するので、以下のようにしても正しい (alias は展開されない)。

"ls"
"l"s
l"s"
'l's
'l'"s"

なお、シングル/ダブルクオーテーション内では、(一部を除いて)意味を失うので、以下のようにはできない。

"\ls"      # \ls というコマンドは無いというエラー