변수가 참조될 때마다 포함된 변수가 동적으로 삽입될 수 있도록 문자열에 변수가 포함된 문자열 변수를 가져오는 방법을 알고 싶습니다.
이는 예제 코드로 가장 잘 설명됩니다.
#!/bin/bash
VAR1="string of var1 $VAR2"
function function1()
{
echo "$1 $VAR1"
}
function function2()
{
VAR2="$1"
}
function2 1000
function1 "example 1:"
function2 2000
function1 "example 2:"
출력은 다음과 같습니다
example 1: string of var1
example 2: string of var1
그러나 원하는 출력은 다음과 같습니다.
example 1: string of var1 1000
example 2: string of var1 2000
이에 대한 문제는 VAR1이 런타임에 한 번만 평가되는 반면 원하는 효과는 참조될 때마다 평가된다는 것입니다. 문자열이VAR1보간하다기능 1,VAR2변수 선언에서 보간이 수행되었으며 비어 있습니다.
분명히 이것은 인위적인 예이지만 문자열 리터럴의 일부로 자주 변경되는 변수가 있다고 상상하는 것은 어렵지 않습니다.
나는 탈출을 시도했다.VAR2\$VAR2
문자열 리터럴에 큰 따옴표를 사용 하고VAR1. 둘 다 리터럴 문자열 "을 생성합니다.var1 $VAR2 문자열"
나도 사용해봤는데평가하다유사 eval "echo "$1 $VAR1""
하지만 이는 작동하지 않으며 따옴표를 이스케이프 처리하기 어려워지기 시작합니다.
예, 모든 것을 리팩토링하여 작동하게 만들 수 있다는 것을 알고 있습니다. 이는 질문에 대한 적절한 답변이 아닙니다.
답변1
@DopeGhoti가 의견에서 말했듯이 변수는 동적이 아니며 데이터를 생성하는 명령이 아니라 정적 데이터를 저장합니다. 실행할 때마다 다른 데이터가 생성되도록 하려면 함수를 사용한 후 다음을 참조하세요 $()
.
dynamic_thing()
{
echo "string of dynamic_thing $VAR2"
}
function function1()
{
echo "$1 $(dynamic_thing)"
}
function function2()
{
VAR2="$1"
}
function2 1000
function1 "example 1:"
function2 2000
function1 "example 2:"
출력은 다음과 같습니다
example 1: string of dynamic_thing 1000
example 2: string of dynamic_thing 2000
답변2
VAR1='string of var1 $VAR2'
function function1()
{
eval echo \"'$1 $VAR1'\"
}