두 가지 변수를 갖고 싶습니다.
이미 다음과 같이 작업 설정이 있습니다.
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)
bash
및 ksh
변형 에서 사용 가능합니다 . 변형에는 없습니다 zsh
.