私の小さなスクリプトは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