bash 스크립트가 있다고 가정하면
ev=USER
ev를 사용하여 $USER의 환경 변수 값을 얻는 방법은 무엇입니까?
순진하게 이것을 시도하십시오 :
echo ${"$"$ev}
이로 인해 대체가 불량해질 수 있습니다.
$USER 값을 반환하고 싶습니다.
답변1
간접 확장("가변 간접 참조"라고도 함)을 사용하면
ev=USER
printf '%s\n' "${!ev}"
bash
이는 (5.0) 매뉴얼의 "매개변수 확장" 섹션에 설명되어 있습니다.
ev
또는 이름 참조를 만들어 ( bash
4.3 이상 필요)
declare -n ev=USER
printf '%s\n' "$ev"
bash
이는 (5.0) 매뉴얼에 설명되어 있지만앞으로"위치 매개변수"라는 섹션입니다.
답변2
만약에 대해서만환경쉘 변수와 달리 변수를 사용하면 대부분의 시스템에서 다음을 사용할 수 있습니다.
printenv -- "$ev"
쉘 변수의 경우 Bourne과 유사한 쉘을 사용하여 다음을 수행할 수 있습니다.
eval 'printf "%s\n" "${'"$ev"}'}"'
또는 다음을 사용하여 zsh
:
printf '%s\n' "${(P)ev}"
또는 다음을 사용하여 bash
:
printf '%s\n' "${!ev}"
콘텐츠가 $ev
귀하의 통제하에 있지 않다면, 이 3가지 취약점은 임의 명령 주입 취약점입니다.
답변3
$ev
다음 값을 바꾼 후 명령을 평가할 수도 있습니다 .
eval echo "$"$ev
이 부분은 이렇게 실행하기 "$"$ev
위해 파싱합니다 .$USER
eval
echo $USER