여러 환경 변수(사용자 ID, 비밀번호, 토큰)가 아직 존재하지 않는 경우 일부 기본값으로 설정하는 bash 스크립트를 원합니다. 존재 테스트는 CLI에서는 작동하지만 스크립트에서는 작동하지 않습니다.
magilla@raspberrypi:~ $ ps -p $$
PID TTY TIME CMD
3005 pts/0 00:00:05 bash
magilla@raspberrypi:~ $ echo "${BASH_VERSION}"
5.1.4(1)-release
magilla@raspberrypi:~ $ env | grep var
magilla@raspberrypi:~ $ [[ -v var ]] && echo "\${var} not defined" || echo "\${var} is defined"
${var} not defined
magilla@raspberrypi:~ $ cat myscript
#!/bin/bash
[[ -v var ]] && echo "\${var} not defined" || echo "\${var} is defined"
magilla@raspberrypi:~ $ bash myscript
${var} is defined
magilla@raspberrypi:~ $ bash < myscript
${var} is defined
답변1
분명히 var
대화형 셸에 설정되어 있습니다(그러나 환경에는 없습니다). 그런 다음 [[ -v var ]]
성공을 반환하고 echo "\${var} not defined"
실행됩니다.
not defined
코드의 논리가 잘못되었기 때문에 알 수 있습니다 .
스크립트가 var
설정되지 않은 경우 [[ -v var ]]
실패를 반환하고 echo "\${var} is defined"
실행됩니다.
is defined
다시 한 번 논리가 잘못되었기 때문에 알 수 있습니다 . 다음 논리는 의미가 있습니다.
[[ -v var ]] && echo "\${var} is defined" || echo "\${var} not defined"
코드의 논리와 반대입니다.