디버깅하려는 거대한 스크립트가 있는데 구조는 다음과 같습니다.
var "-p Some Parameter" || return 1
var "-p Other Parameter" || return 0
나는 그것이 실제로 무엇을 하는지 알고 싶습니다(그리고 어떤 var에서 오류 메시지를 받기 때문에 그것이 무엇인지 알고 있습니다). 그러나 그렇게 하면 echo $var
빈 echo ${var}
문자열이 제공됩니다. echo "${!var}"
작동하지 않는 경우("구문 오류: 잘못된 대체")
eval e="\$$var"
echo $e
"$"만 인쇄됩니다.
Ash의 변수가 실제로 동일한지 알아낼 수 있는 방법이 있습니까? 아니면 스크립트(Alpine에서 사용 가능)에 의해 실행되는 실제 명령을 볼 수 있는 일종의 추적이 있습니까?
답변1
var "-p Some Parameter" || return 1
ash
POSIX와 유사한 쉘로 간주되므로 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
한 다음 인쇄하는 것처럼 보이지만 변수에 공백이 포함되어 있으면 할당이 중단됩니다.