Ash에서 변수 값을 찾는 방법은 무엇입니까?

Ash에서 변수 값을 찾는 방법은 무엇입니까?

디버깅하려는 거대한 스크립트가 있는데 구조는 다음과 같습니다.

var "-p Some Parameter"  || return 1
var "-p Other Parameter" || return 0

나는 그것이 실제로 무엇을 하는지 알고 싶습니다(그리고 어떤 var에서 오류 메시지를 받기 때문에 그것이 무엇인지 알고 있습니다). 그러나 그렇게 하면 echo $varecho ${var}문자열이 제공됩니다. echo "${!var}"작동하지 않는 경우("구문 오류: 잘못된 대체")

eval e="\$$var"
echo $e

"$"만 인쇄됩니다.

Ash의 변수가 실제로 동일한지 알아낼 수 있는 방법이 있습니까? 아니면 스크립트(Alpine에서 사용 가능)에 의해 실행되는 실제 명령을 볼 수 있는 일종의 추적이 있습니까?

답변1

var "-p Some Parameter"  || return 1

ashPOSIX와 유사한 쉘로 간주되므로 var문자열을 인수 -p Some Parameter로 사용하여 명명된 명령을 실행합니다(그리고 return종료 상태에 따라 호출될 수도 있습니다). 무슨 일이 일어나는지는 전적으로 var일어나는 일에 달려 있습니다.

이렇게 하면 빈 문자열이 제공됩니다 echo $var.echo ${var}

그러면 변수가 $var설정되지 않거나 비어 있을 수 있습니다(또는 공백만 포함할 수 있습니다). echo "${var+var is set}"이것이 중요하다면 설정되어 있는지 확인해 보세요.

그러나 이름이 지정된 변수는 var이름이 지정된 명령이나 함수와 아무 관련이 없습니다 var.

echo "${!var}"

변수의 값으로 확장되는 간접 변수 확장을 위한 Bashism입니다.의 이름을 따서 명명변수 var표준이 아니므로 오류가 발생할 가능성이 높습니다.

eval e="\$$var"
echo $e

이것이 무엇을 해야 할지 잘 모르겠습니다. 변수의 값을 var변수에 할당 e한 다음 인쇄하는 것처럼 보이지만 변수에 공백이 포함되어 있으면 할당이 중단됩니다.

관련 정보