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]

여기서는 세 개의 숫자 목록이 생성되고 할당 후 b = a두 이름 모두 동일한 목록을 참조하므로 하나를 변경하면 다른 이름도 변경됩니다.

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바라보다다른 연관 배열을 기반으로 연관 배열 만들기

관련 정보