シェルスクリプトに変数を設定するための3つの構文があるのはなぜですか?

シェルスクリプトに変数を設定するための3つの構文があるのはなぜですか?
root@ubuntu:~# echo ${x=1}
1
root@ubuntu:~# echo ${x:=1}
1
root@ubuntu:~# echo ${x-1}
1
root@ubuntu:~# 

シェルスクリプトに変数を設定するための3つの構文があるのはなぜですか?

3つの構文を使用すると、どのような技術的な利点がありますか?

プログラミング言語にも複数の言語はありません。

ベストアンサー1

彼らは少し違うことをします。実際、最後の項目はecho ${x-1}実際には設定されていません。Xただし、式の値は1の場合にのみ置き換えられます。X設定されていません。

x=1一方、設定X無条件。

:= 演算子の場合。これはから来たものですケシ手動:

   ${parameter:=word}
          If  parameter is not set or is null then set it to word; the
          value of the parameter is then substituted.  Positional  parameters may 
          not be assigned to in this way.

Rubyでは||=

この家族を見るとXもっと = 演算子がありますが、:-これが私が見たものの中で最も人気のあるものです。それ代替変数がまだ設定されていない場合は、デフォルト値に設定します。したがって、次のように使用できます。

x=${1:-10}

英語は次のとおりです。 $ 1を設定しないと、10が割り当てられます。X、それ以外の場合は次に割り当てられますX$1の価値。関数には、パラメータにデフォルト値を割り当てる効果があります。だから

f() {
  typeset x
  x=${1-10}
  ...
}

Pythonと同じ:

def f(x=10): 

私の考えでは、David Kornは通信事業者の多様性が多少大きかったかもしれないことを認めます。POSIX規格、セクション2.6.2だからおそらくそこに滞在します。

プログラミング言語にも複数の言語はありません。

上記のように、これは誤解があります。正確に同じ。プログラミング言語では、代入文のバリエーションはまれではありません。私は||=それをRubyで言及しました。多くの言語にこの機能があります+=-=Perlで$ xを実行する前に定義しないと1に$x += 1設定されます$x(そして「厳密な」チェックを有効にしないと本当に残念です)。

おすすめ記事