コマンドの「-i」と「--interactive」の違い ― ハイフン1個と2個の使い分け
結論
-i と --interactive は、ほとんどの場合まったく同じ意味です。違いは見た目と用途の慣習だけで、機能としては同じ動作をします。
使い分けの目安は以下のとおりです。
- 手元で素早く打つとき: 短いほう(
-i) - スクリプトに書く・人に共有するとき: 長いほう(
--interactive)
たとえば rm -rf folder と rm --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標準のコマンドとは別物
dir や copy のような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種類あって戸惑いますが、慣れてくると「サッと打ちたい」「あとで読みやすくしたい」の意図で自然に使い分けられるようになります。