問題ID : 15567  の「参考」部分について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2020-11-13 10:15
D14975  半人前   投稿数: 7
「$#」「$n」の部分について
「$0」はシェルスクリプト名:実行コマンド名
「$n」は2桁以上の変数には{ }で囲む必要がある  ということは理解しました。

以下、問題ID : 15567の「参考」部分の内容です。
sample.shのシェルスクリプトで以下を作成
echo NUM: $#
echo NO_BRACE: $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11
echo WITH_BRACE: ${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11}
source sample.shと引数に何も指定せず実行した場合について、
・「{ }」で囲んでいない方
「0 1」が表示される。
「$1”0” $1”1”」と解釈される為で、$1には何も値が入っていないので文字としての「0 1」だけが表示される。
・「{ }」で変数名を囲んだ側
値入っていない「${10}」、「${11}」を正しく参照しており、何も表示されない。

となっています。

<質問>
「「{ }」で囲んでいない方」が「0 1」と表示される理由が理解できません。
引数を指定していないのに、【なぜ「$1”0” $1”1”」とこの2つだけ解釈される】のでしょうか?
「$1」や「$2」・・・、また「$1”10”」や「$1”111”」・・・などは解釈されないのでしょうか?

「「{ }」で変数名を囲んだ側」は、同じくなぜ「${10}」、「${11}」とこの2つだけ判断するのでしょうか?
「${2}」や「${5}」などは認識しないのでしょうか?
なぜ「${10}」と「${11}」を特別扱いして記載しているのか申し訳ございませんがよくわかりません。
【そもそも引数に何も指定してないのだから判断しない】、とは考えないのでしょうか?


どうぞ宜しくお願い致します。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-11-13 11:14
arashi1977  長老 居住地: 広島  投稿数: 1715
あー、多分説明がちょっと不足してるのかな。
引用:
<質問>
「「{ }」で囲んでいない方」が「0 1」と表示される理由が理解できません。
引数を指定していないのに、【なぜ「$1”0” $1”1”」とこの2つだけ解釈される】のでしょうか?
「$1」や「$2」・・・、また「$1”10”」や「$1”111”」・・・などは解釈されないのでしょうか?
ここはですね
・「$1から$9」は「何も引数を指定していないので、それぞれ何も値がない」
・「$10」が「($1=なにもない)0」となる
・「$11」が「($1=なにもない)1」となる
よって「(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)0(なにもない)1」というものが「0 1」と見えている、ということなのです。
※引数間のスペースは、なにもない者同士をつなげたときには消えます。

引用:
「「{ }」で変数名を囲んだ側」は、同じくなぜ「${10}」、「${11}」とこの2つだけ判断するのでしょうか?
「${2}」や「${5}」などは認識しないのでしょうか?
なぜ「${10}」と「${11}」を特別扱いして記載しているのか申し訳ございませんがよくわかりません。
【そもそも引数に何も指定してないのだから判断しない】、とは考えないのでしょうか?
ここは上記の逆ですね。
「{}」で囲むことで
・「${10}」と扱われ、「10番目の引数はなにもない」となる
・「${11}」と扱われ、「11番目の引数はなにもない」となる
よって「(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)(なにもない)」というものが「WITH_BRACE:」行の出力になるわけです。

で、どうでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-11-13 11:50
D14975  半人前   投稿数: 7
早速のご返信ありがとうございます。

めちゃくちゃ分かりやすく、ようやく納得できました!
1〜9については説明が省略されていたのですね。
10と11についてそれぞれの違いを説明されていたのだと腑に落ちました。

誠にありがとうございます!

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.