コマンドの「-i」と「--interactive」の違い ― ハイフン1個と2個の使い分け


結論

-i--interactive は、ほとんどの場合まったく同じ意味です。違いは見た目と用途の慣習だけで、機能としては同じ動作をします。

使い分けの目安は以下のとおりです。

  • 手元で素早く打つとき: 短いほう(-i
  • スクリプトに書く・人に共有するとき: 長いほう(--interactive

たとえば rm -rf folderrm --recursive --force folder は、まったく同じ結果になります。長いほうは「何をしているか」が読んで分かるので、後から見返すスクリプトに向いている、というだけの違いです。

なぜ2種類あるのか(実用上知っておくと便利な範囲で)

Linuxやmacosのコマンドには、歴史的な経緯で2つの書き方が併存しています。

  • 短いオプション(-i: 古いUNIX時代からの書き方。1文字で打てるので速い。
  • 長いオプション(--interactive: あとから追加された書き方。単語で書くので意味が分かりやすい。

私の場合、最初にWSLを触り始めたとき「-rf ってなに? --recursive --force と何が違うの?」と混乱しました。実際にやってみると、両方とも同じ動きで、単に表記の違いということに気づいて拍子抜けした記憶があります。

基本ルール3つ

1. ハイフン1個 + 1文字

ls -a
rm -r folder
grep -i "error" log.txt

短いオプションは1文字ずつです。-a-r-i のように1文字でひとつのオプションを表します。

2. ハイフン2個 + 単語

ls --all
rm --recursive folder
grep --ignore-case "error" log.txt

長いオプションは英単語になっています。--all-a と同じ、--recursive-r と同じです。

3. 短いオプションは連結できる

ここが地味に大事なポイントです。

# この3つはすべて同じ意味
rm -r -f folder
rm -rf folder
rm -fr folder

短いオプション同士は -rf のようにくっつけて書けます。一方、長いオプションは連結できません

# これは動きません
rm --recursive--force folder   # NG

# 長いほうは1個ずつ書く
rm --recursive --force folder  # OK

実務での使い分け

私が普段やっている使い分けの基準です。

場面おすすめ理由
ターミナルで対話的に打つ-rf のような短い形タイプ数が少なくて速い
シェルスクリプトに書く--recursive --force のような長い形後から読み返したときに意味が分かる
Qiitaやブログで共有する長い形読者が意味を推測しやすい
自分用のメモどちらでもよいわかれば何でもOK

実際にやってみると、スクリプトに -rf と書いてあるより --recursive --force と書いてあるほうが、半年後の自分が読んだときの理解が圧倒的に速いです。特にチームでスクリプトを共有する場面では、長いほうが親切だと感じます。

よく使うコマンドの対応表

WSLやGit Bashで使う頻度が高いものをまとめました。

# ls (ファイル一覧)
ls -a       # ls --all          隠しファイルも表示
ls -l       # ls --format=long  詳細表示
ls -h       # ls --human-readable  サイズを読みやすく

# rm (削除)
rm -r       # rm --recursive    フォルダごと削除
rm -f       # rm --force        確認なしで削除
rm -i       # rm --interactive  1件ずつ確認

# cp / mv (コピー・移動)
cp -r       # cp --recursive    フォルダごとコピー
cp -i       # cp --interactive  上書き前に確認

# grep (検索)
grep -i     # grep --ignore-case   大文字小文字を無視
grep -r     # grep --recursive     フォルダ内を再帰検索
grep -n     # grep --line-number   行番号を表示

補足・注意点

コマンドによって対応が違うことがある

ほとんどのコマンドで -i--interactive は同じ意味ですが、コマンドによっては短い形しかない、または長い形しかないものもあります。とくに古いツールや、Windowsから移植されたツールでこの傾向があります。

迷ったら man コマンド名 または コマンド名 --help で確認するのが確実です。

rm --help
grep --help

Windows標準のコマンドとは別物

dircopy のようなWindowsコマンドプロンプトのコマンドは、ここで説明したUNIX流のオプション体系とは別です。Windowsのコマンドは /a/s のように スラッシュ + 1文字 を使うのが伝統的でした(最近は -- を受け付けるものも増えています)。

WSLやGit Bashで触るのは「UNIX流」、コマンドプロンプトやPowerShellで触るのは「Windows流」、という大まかな線引きで覚えておくと混乱しにくいです。

危険なオプションには長い形を使うと安心

rm -rf / のような事故を防ぐ意味で、破壊的な操作には長い形を使うという運用ルールにしている現場もあります。

# 短い形だと一瞬で打ててしまう
rm -rf important_folder

# 長い形だと打つ過程で「ほんとに?」と考える時間ができる
rm --recursive --force important_folder

タイプ数が増える分、心理的なブレーキになる、という考え方です。私もスクリプトに削除処理を書くときは、意識して長い形にしています。

なお、環境やシェル(bash、zsh、dashなど)によって挙動が変わることがあるため、重要なファイルを扱う作業では事前にバックアップを取ってから確認することをおすすめします。

よくある質問

Q. -rf-r -f で性能差はありますか? A. ありません。完全に同じです。

Q. 長いオプションに = を使うのは何ですか? A. --output=file.txt のように、引数を取る長いオプションで使われます。--output file.txt のようにスペース区切りでもOKな場合が多いですが、= のほうが「このオプションの引数だ」と明確になります。

Q. PowerShellでも同じルールですか? A. いいえ、PowerShellは -Recurse のように ハイフン1個 + 単語 という独自の体系です。Linux系コマンドのルールはWSLやGit Bashの中だけだと考えてください。

まとめ

  • -i--interactive は基本的に同じ意味
  • 短い形は速い、長い形は読みやすい
  • ターミナルで打つときは短く、スクリプトには長く、が無難
  • 困ったら --help で確認

最初は2種類あって戸惑いますが、慣れてくると「サッと打ちたい」「あとで読みやすくしたい」の意図で自然に使い分けられるようになります。