Var1은 실행된 명령의 내용으로 설정되고, Var2는 Var1의 명령으로 설정되는 방법

Var1은 실행된 명령의 내용으로 설정되고, Var2는 Var1의 명령으로 설정되는 방법

두 가지 변수를 갖고 싶습니다.

이미 다음과 같이 작업 설정이 있습니다.

var1="$(echo hello)"

아래와 같이 인쇄되면 "Hello"라고 표시됩니다.

"${var1}" = "hello"

내가 원하는 건

var2=$var1

인쇄 시 "echo hello" 표시

"${var2}" = "echo hello"

var1이 명령의 출력으로 설정되어 있으므로 이는 논리적으로 불가능할 수 있습니다.어쨌든 명령 출력 대신 var1을 설정하는 명령을 가져오도록 var2를 설정할 수 있습니까?

답변1

해당 정보가 더 이상 존재하지 않기 때문에 변수를 생성한 명령을 추출할 수 없습니다. 그러나 을 var1사용하여 빌드 명령 실행을 지연 할 수 있습니다 eval. 예를 들어:

var1="echo hello"
echo "var1: $var1"

var2="$var1"
echo "var2: $var2"

var1=$(eval "$var1")
echo "var1: $var1"

다음을 인쇄합니다:

var1: echo hello
var2: echo hello
var1: hello

eval해당 명령의 출력이 필요할 때까지 내부 명령을 실행하는 데 사용할 수 있으므로 var1명령 자체를 var1.

이것은 좋은 코딩 습관은 아니지만. 거의 모든 경우에 두 개의 변수를 갖는 것이 더 좋습니다. 하나는 명령을 저장하고 다른 하나는 출력을 저장합니다. eval일부 보안 및 일반적인 디버깅 문제로 인해 사용이 권장되지 않습니다.


참고로, 이 특정 경우에 유일한 쉘 특수 문자가 공백인 명령이 있는 경우 여러 쉘을 사용하면 변수를 실행하지 않고도 변수에서 하위 쉘을 실행할 수 있습니다. eval즉, 이는 대부분의 쉘에서 작동합니다. 중간 직업:

var3=$($var1)

bashksh변형 에서 사용 가능합니다 . 변형에는 없습니다 zsh.

관련 정보