Q1cmd1 && cmd2でcmd2が実行されるのはどんなときですか?
コマンドをつなぐ — ; && || とクォート
; での順次実行、&& と || での成功時・失敗時の条件実行、シングルクォートとダブルクォートでの変数展開の違いを、ブラウザ端末で操作しながら学べます。
コマンドの連結 — ; && ||
複数のコマンドを 1 行でつなげて実行できます。
;は前のコマンドの結果に関係なく順番に実行します。
&&は前のコマンドが成功したときだけ次を実行し、||は前のコマンドが失敗したときだけ次を実行します。
| 記号 | 次を実行する条件 | 例 |
|---|---|---|
; | 前の結果に関係なく必ず | echo a ; echo b |
&& | 前が成功(終了ステータス 0)したときだけ | mkdir d && cd d |
|| | 前が失敗(0 以外)したときだけ | cat f || echo ng |
;は常に順次、&&は成功時、||は失敗時に次へ進みます。echo step1 ; echo step2 # 順番に両方実行
mkdir build && echo created # 成功したら created
ls missing.txt || echo not-found # 失敗したら not-found
&& と || をつなげる — その場で分岐
&&と||は 1 行に続けて書けます。
cmd && echo ok || echo ngは、cmdが成功すればecho okを実行し、失敗すればecho ngを実行します。
成功時と失敗時の処理をその場でまとめて書きたいときの定番の形です。
cmd && echo ok || echo ngは、cmdが成功すればok、失敗すればngを表示します。mkdir out && echo created || echo failed # 成功なら created
ls nofile.txt && echo found || echo none # 失敗なら none
クォートの違い — ' と "
文字列を囲むクォートには 2 種類あります。
シングルクォート'...'は中身をそのままの文字として扱い、$VARも置き換えません。
ダブルクォート"..."は中の$VARや$(...)を値に展開します。
空白を含む文字列をひとまとまりとして渡したいときにも使います。
| クォート | $VAR の扱い | $(...) の扱い | 例 → 出力 |
|---|---|---|---|
'...'(シングル) | 展開しない(文字のまま) | 展開しない | echo '$name' → $name |
"..."(ダブル) | 値に展開 | コマンド出力に展開 | echo "$name" → Linux |
$変数を値に展開します。place=server
echo 'path is $place' # そのまま: path is $place
echo "path is $place" # 展開: path is server
ダブルクォートで変数とコマンド出力を埋め込む
ダブルクォートの中では変数とコマンド置換をまとめて 1 つの文字列に組み立てられます。
$(...)はコマンドの出力結果に置き換わります。
たとえば$(pwd)は現在地のパスそのものに置き換わってから表示されます。
空白を含む値を 1 つの引数として渡すときにも、ダブルクォートで囲むのが基本です。
成功・失敗の正体 — 終了ステータスと echo $?
&&や||が見ている「成功・失敗」は、コマンドが終わるときに残す終了ステータスという数値で決まります。
0が成功、0以外が失敗です。
直前のコマンドの終了ステータスは特別な変数$?に入り、echo $?で確認できます。
| 終了ステータス | 意味 | 確認 |
|---|---|---|
0 | 直前のコマンドが成功 | echo $? が 0 |
0 以外 | 直前のコマンドが失敗 | echo $? が 1 など |
echo $?が0、失敗したコマンドの直後は0以外になります。ls . # 成功するコマンド
echo $? # 直前の終了ステータス → 0
cat nofile.txt # 失敗するコマンド
echo $? # 直前の終了ステータス → 0 以外(例: 1)
理解度チェック
まずは1問ずつ答えてみましょう。
Q2echo '$name'の出力はどれですか?(name=Linuxを設定済みとする)
Q3||の役割として正しいものはどれですか?