0

Bashでは、プログラミング言語のどの概念が次の例を示していますか?最初の例でBashのこれらの例では、動的な型定義と静的な型指定がありますか?

  1. 、変数bar最初 値helloと文字列型であり、そしてそれは演算式で使用されるときに、 その値は0なります。だから、私にはbar の型が文字列から整数に変更されたようです。

    この例では、(整数の列からコンテキストに従ってbarの種類を明示的に宣言または定義されていないため、 及び変更) を入力ダイナミック暗黙的型変換両方の 概念を実証していますか?第2の例で

    $ bar=hello 
    $ echo $bar 
    hello 
    $ echo $((bar)) 
    0 
    
  2. 、可変bbb整数 タイプであると宣言し、私はそれを243*8を与えています。それから私はそれに helloを与え、その値は0に変わります。

    hello文字列 値または別の変数? helloが文字列値の場合、変数bbbに割り当てる前に、文字列値helloから整数値0への型変換が必要です。 bbbの種類を明示的に最初から宣言 あり、変更することはできませんので

    は、この例では、コンセプトを入力静的なの を実証していますか? #1について

    $ declare -i bbb 
    $ bbb=3*8 
    $ echo bbb 
    24 
    $ bbb=hello 
    $ echo $bbb 
    0 
    

答えて

1

、これは、変換を入力されていません。それはパラメータ拡張です。

  1. x=6; echo $((x))が生成されます。この値は有効な整数リテラルです。
  2. x=foo; foo=6; echo $((x))も生成されます。xの値は、整数値のパラメータを指定する文字列です。
  3. unset x; echo $((x))は、xが設定されていないため、0を生成します。
  4. x=3+5; y=bar; z=; echo $((x + y + z))は、3つの文字列のいずれも、前の3つのルールのいずれかによって非ゼロの整数値に展開できないため、0を生成します。

#2については、bbbが整数属性が設定されているという事実は、それに割り当てられた任意の値を暗黙的に演算式として扱われることを意味します。つまり、bbb=whateverbbb=$((whatever))に相当します。このように、helloは、上記で概説したのと同じ拡張を受ける。具体的には、

$ declare -i bbb 
$ bbb=hello 
$ echo $bbb 
0 
$ hello=6 
$ bbb=hello 
$ echo $bbb 
6 
+0

ありがとうございます。 'x = 3 + 5; y = bar; z = echo $((x + y + z)) 'は' 8'を生成します。どうして「0」と言うのですか? 2. 'x = foo; foo = 6;値 'foo'で停止するのではなく、変数' x'からその値 'foo'まで、そして変数' foo'からその値 '6'までの最後のコマンドトレースをなぜecho $((x))' 'x'の? – Tim

+0

例から 'x = 3 + 5'を削除しました。私はテストで0に拡大したのを見たと思ったが、どこかでミスをした。 'x' /' foo'の例では、展開は再帰的です。拡張が算術コンテキストで文字列を生成するたびに、* stringも展開され、整数値が導出されるまでプロセスが繰り返されます。 – chepner

関連する問題