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 -n
nameref変数を生成するか、${!p}
間接参照を使用する必要があります。
また、このような配列をコピーすることもできません。配列名のみを参照する場合は、要素ごとに実行する必要があります。a
Bashの配列の場合、インデックス$a
0の要素のみを取得します。
$ 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
バラより他の連想配列に基づいて連想配列を作成する