내 작은 스크립트는 csv 파일에서 DOI를 추출하여 올바른지 확인합니다. 숫자는 같아야 합니다 3
. 그렇지 않으면 메시지를 출력하고 싶습니다.
#!/bin/bash
doi=j.1540-6261.2011.01681.x
num_redirect=[[ curl -L -s -w %{num_redirects} "http://dx.doi.org/"$doi -o /dev/null ]]
echo $num_redirect
if (( "$num_redirect" -eq 3 ))
then
echo $doi " is correct"
else
echo $doi " is wrong"
fi
num_redirects
내 터미널에서는 작동하는 것 같지만 계속 3
오류가 발생 ((: -lt 3 : syntax error in expression (error token is "3 ")
하고 잘못된 출력이 발생합니다.
num_redirect
그런 다음 실제로 정수인지 확인합니다.
case $num_redirect in
''|*[!0-9]*) echo bad ;;
*) echo good ;;
esac
(https://stackoverflow.com/a/3951175/3621464)나는 받았다 bad
.
이제 어떤 종류의 출력이 나오는지 알고 싶습니다 curl -s -w %{num_redirects}
. 길이가 echo ${#num_redirect}
있다고 해보세요 0
.
답변1
명령 curl
이 실행되었지만 해당 출력이 에 할당되지 않았습니다 num_redirect
. 이는 컬의 출력이 "3"(개행 없음)으로 표시됨을 의미합니다. 그러나 echo $num_redirect
변수가 비어 있으므로 실행 시 줄바꿈이 삽입됩니다. 이는 변수 num_redirect
의 값이 "3"이라는 인상을 줍니다.
백틱을 사용하거나 $()
명령을 실행하고 표준 출력에서 해당 출력을 캡처해야 합니다.
num_redirect=$(curl -L -s -w %{num_redirects} "http://dx.doi.org/"$doi -o /dev/null)
[
또한 변수를 정수와 비교하려면 및 를 사용해야 합니다 ]
. 이제 다시 명령을 평가하면 됩니다.
if [ "$num_redirect" -eq 3 ]
then
...
else
...
fi