스크립트가 있습니다.
#!/bin/bash
if [[ read -t 10 -sp "Enter Password: " passwd ]]; then
echo -e "\nPassword: ${passwd}"
else
echo -e "\nInput timed out" >&2
exit 1
fi
exit 0
하지만 오류가 발생합니다.
./script.sh: line 3: conditional binary operator expected
./script.sh: line 3: syntax error near `-t'
./script.sh: line 3: `if [[ read -t 10 -sp "Enter Password: " passwd ]]; then'
내 코드에 문제가 있나요?
답변1
그럴 필요는 없습니다 [[ ... ]]
. 다음과 같이 다시 작성하면 됩니다.
#!/bin/bash
if read -t 10 -sp "Enter Password: " passwd; then
echo -e "\nPassword: ${passwd}"
else
echo -e "\nInput timed out" >&2
exit 1
fi
exit 0
또는 읽기 쉽고 짧습니다.
#!/bin/bash
read -t 10 -sp "Enter Password: " passwd || echo -e "\nInput timed out" >&2 && exit 1
echo -e "\nPassword: ${passwd}"
exit 0
고쳐 쓰다:
없이 작동하는 이유를 이해하려면 [[ ... ]]
bash man을 확인해야 합니다.
목록이면 목록; 목록이면 ] ... [다른 목록]
이것나열된 경우처형되다. 종료 상태가 0이면그런 다음 나열 처형되다. 그렇지 않으면 각엘리프 목록순서대로 실행됩니다. [...]
이 예에서 The는 if list
읽기 명령입니다. [ $? -eq 0 ]
또한 test $? -eq 0
특정 종료 상태가 있는 유효한 목록입니다. [[ expression ]]
(bash man에 따르면) 역시 유효한 목록이지만 read -t 10 -sp "Enter Password: " passwd
유효한 표현식은 아닙니다. 이 사람을 보면 효과적인 표현이 무엇인지 알 수 있습니다.
답변2
문에서 명령을 사용하고 있는데 [[ ]]
, 이는 말이 되지 않습니다. 이 연산자는 test
특정 조건을 확인하는 함수처럼 사용되어야 합니다 .
read
명령을 개별적으로 실행하고 종료 코드를 확인하는 것이 좋습니다 .
#!/bin/bash
read -t 10 -sp "Enter Password: " passwd
if [ $? -eq 0 ]; then
echo -e "\nPassword: ${passwd}"
else
echo -e "\nInput timed out" >&2
exit 1
fi
exit 0