[[ -v var ]] bash 스크립트와 CLI 내에서 다르게 동작합니다.

[[ -v var ]] bash 스크립트와 CLI 내에서 다르게 동작합니다.

여러 환경 변수(사용자 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"

코드의 논리와 반대입니다.

관련 정보