助け合いフォーラム

LinuC

LinuC Lv1-102(Ver10.0)
問題ID : 15568
問題を開く
シェルスクリプトに渡された引数の数が2つではない場合は、後続の処理を中断するようなシェルスクリプトを作成したい。下図の( )内に記述する内容として適切なものは次のうちどれか。

この問題はプレミアムコンテンツです。

上に戻る

何度読んでも分かりません。

投稿日 2022/10/03

この問題の【参考】の下の方にある、下記の解説文が、何度読んでも理解ができないのですが、
どなたか分かり易く解説いただけないでしょうか。
特に太字の部分が何で??と思います。

・「{}」で囲んでいない方では「0 1」が表示されます。これは「$1"0" $1"1"」と解釈されるためで、$1には何も値が入っていないので文字としての「0 1」だけが表示されることになります。

同じようなスクリプトを組んで実行してみても、表示通りの結果になるだけで、「ふーん」としか思えません。
引数の個数を変えてやってみても、〇〇0 〇〇1 と必ず二つ出るというのが理解できません。

2022/10/03 22:03

これは「$1"0" $1"1"」と解釈されるためで、$1には何も値が入っていないので文字としての「0 1」だけが表示されることになります。

本当は $10 は "$10"、$11 は "$11" として解釈してほしいところを、ブレース{} で囲っていないと
$10 → $1 と 文字"0"
$11 → $1 と 文字"1"
で分解して解釈されちゃうので、
$10 → $1(引数がないので空) と 文字"0" = 文字"0" だけ出力される
$11 → $1(引数がないので空) と 文字"1" = 文字"1" だけ出力される
ってことだと思います。

ちなみに同条件で「$100」を出力してみたら、「$1 と 文字"0" と 文字"0"」で解釈されて "00" が出力されました。


コメント

r ruttey

2022/10/04 16:51

理解できました。ありがとうございます。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?