저는 상당히 복잡한 코드에서 많은 변수를 생성하는 KSH 스크립트를 사용하고 있습니다. 이러한 변수가 생성되었을 때 해당 변수의 값을 보려면 스크립트에 어떤 명령을 넣을 수 있나요? ECHO가 올바른 명령인가요?에코 변수는 $variable_name입니다.?
답변1
아마도 그것이 당신이 원하는 것입니다 set -x
. 이렇게 하면 추적 모드가 활성화됩니다. 쉘은 각 명령을 실행하기 전에 인쇄합니다. 이 줄 아래에 있는 스크립트의 두 번째 줄을 만드세요 #!
. 스크립트의 일부에서 추적을 끄려면 사용하십시오 set +x
.
변수의 값을 표시하려면 를 사용할 수 있지만 echo "$somevariable"
이것이 항상 충분하지는 않습니다. 큰따옴표를 생략하지 않도록 주의하세요. 큰따옴표가 없으면 변수 값은 문자열이 아닌 파일 이름 와일드카드 패턴 목록으로 해석됩니다. 이 변수에는 작동하지 않는 일부 값이 있습니다 echo
. ksh에서 전체 목록은 -e
, -n
및 이며 모두 -ne
옵션으로 해석됩니다. 이 해석을 피하려면 대신 또는 를 사용하십시오(아래 두 명령은 동일합니다).-en
echo
print
printf
print -r -- "$somevariable"
printf '%s\n' "$somevariable"
변수 값에 후행 공백이나 인쇄할 수 없는 문자가 포함되어 있으면 화면에 표시되지 않습니다. 변수 값의 명확한 표현을 인쇄하려면 %q
이스케이프를 사용하세요 .printf
printf '$%s is %q\n' somevariable "$somevariable"
함수에 넣을 수 있습니다.
trace_variables () {
typeset _trace_variables__var
for _trace_variables__var; do
typeset -n _trace_variables__ref="$_trace_variables__var"
printf "%s = %q\\n" "$_trace_variables__var" "$_trace_variables__ref"
done
}
…
trace_variables somevariable anothervariable
답변2
ksh에서 변수 대체의 올바른 사용은 ${variable_name}입니다. 예, 터미널에 에코하거나 테스트 명령에서 사용할 수 있습니다(예: [ ${variable_name} - eq ${mynumber} ] 등).
중괄호 사용을 건너뛰어도 대부분의 경우에는 여전히 작동하지만 실수할 가능성이 더 높습니다. 그래서 제 조언은 항상 그것들을 사용하라는 것입니다.