Bashに変数値の複製機能がありますか?そうでなければなぜならないのですか?

Bashに変数値の複製機能がありますか?そうでなければなぜならないのですか?

PHPでは、次の方法である変数の変数値を別の変数にコピーできます。

$copy = clone $original;

これはPHPについて質問する場所ではありませんが、cloneそこに単語を追加するのが役に立つ理由を誤解しました。つまり、なぜ書いていないのか$copy = $original、Bash(該当する場合)と比較すると、理由を理解するのに役立ちます。

答え1

私はこの複製(コピー)がYの変更がXの元の値に影響を与えるのを防ぐことを知っています。
Bashでこれを行う方法は?

私はPHPに精通していませんが、Pythonでは次のような状況を避けたいと思います。

>>> a = [1, 2, 3]
>>> b = a
>>> b[1] = 9
>>> b
[1, 9, 3]
>>> a
[1, 9, 3]

ここでは、3 つの数値リストが作成され、割り当て後に両方の名前がb = a同じリストを参照するため、1 つを変更すると他の名前も変更されます。

Bashには暗黙的な参照がなく、言及するオブジェクトがほとんどないため、この状況は事実上不可能です。変数を参照するには、declare -n/を使用して明示的にtypeset -nnameref変数を生成するか、${!p}間接参照を使用する必要があります。

また、このような配列をコピーすることもできません。配列名のみを参照する場合は、要素ごとに実行する必要があります。aBashの配列の場合、インデックス$a0の要素のみを取得します。

$ a=(1 2 3)
$ b=$a
$ declare -p b
declare -- b="1"

割り当て後はb値が1

次のように配列をコピーできます。

$ a=(1 2 3)
$ b=("${a[@]}")
$ declare -p b
declare -a b=([0]="1" [1]="2" [2]="3")

これは単に値をコピーし、その値で新しい配列を作成するだけです。 (私が収集したところによると、b=[*a]Pythonに似ていて、おそらくPHPに似ているでしょう。)また、コメントで述べたように、配列が希薄または関連している場合、重要な元のインデックスを忘れてしまいます。cloneバラより他の連想配列に基づいて連想配列を作成する

関連情報