Linux シェルの「var=${str=expr}」の意味は何ですか?

Linux シェルの「var=${str=expr}」の意味は何ですか?

Linux シェルの「var=${str=expr}」の意味は何ですか? 具体的に説明してくれる人はいますか?

答え1

「パラメータ拡張」を参照してくださいman bash:

${parameter:=word} デフォルト値を割り当てます。パラメータが設定されていないか null の場合、word の展開がパラメータに割り当てられます。その後、パラメータの値が置き換えられます。位置パラメータと特殊パラメータは、この方法で割り当てることはできません。

コロンについては上で説明しました:

部分文字列の拡張を実行していない場合、以下に記載されている形式を使用して、bash は設定されていないパラメータまたは null のパラメータをテストします。コロンを省略すると、設定されていないパラメータのみがテストされます。

証拠:

var=${str=expr}
echo $var
echo $str

出力:

expr
expr

答え2

bash では、 $( ) を使用してサブシェルでタスクを開始できます。

例:

#!/usr/bin/env bash
foo=${ls}
echo $foo

lsこのスクリプトは、変数 $foo に.の結果を入力します
(そしてecho $fooその内容を表示します)。


さて、より具体的な質問に移ります。私も結果はわからなかったので、「Linux シェル」とは、私の Linux ディストリビューションのデフォルト シェルである bash を意味するものと想定してテストしました。

次のファイルを作成しました:

#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo

そして実行しました:

> ./test t
test 1 2 3

文字列(または式)内の値を変数に割り当てるようですそしてその値を親スクリプトに返します。


要点をまとめると:

  • 新しいシェルが開始されます
  • 新しいシェルはコマンドを実行しますstr=expr
  • 親シェルは結果を出力として取得します。
  • 親シェルはその結果を $var に保存します。

関連情報