Bashが整数の代わりに8進コードを解釈するのを防ぐ方法は?

Bashが整数の代わりに8進コードを解釈するのを防ぐ方法は?

私はUnix / Linuxプロジェクトの紹介でConstellation RSSスクリプトを書いていますが、授業が終わった後に滞在中に教授が解決できないという問題に遭遇しました。実際の日付を小切手として使用する方法がわからないので、ユーザーがMMDD形式の標準番号を入力するようにして基本的な操作を試みたかったのです。彼によると、スクリプトは入力を整数ではなく8進コードで読み取るようです。以下はスクリプトの例です。

    elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit

一般的な内容なのでRSS部分を差し引いた。 "olddate"は私の読書プロンプトのための期待される入力です。 1121〜1131、1200〜1222、0100〜0120は機能しますが、1221〜1232の間は機能しません。彼は前にゼロを付けずにヤギの座に113を入力することが有効なので、これは問題だと思います。また、0323は私に牡羊座(-gt 0320&&-lt 0332)を提供する必要がありますが、アクエリアス(日付は-gt 0119&& -lt 0132 || -gt 0200&&-lt 0219)を提供し、0417は提供しない問題に直面しました。動作しません(牽引の別の日付範囲 -gt 0400 && -lt 0420)。

BASHに入力を実際の数値として解釈させるにはどうすればよいですか?彼は「userdate」を入力として期待するように、読み込みプロンプトを変更しようとし、追加しました。

olddate=`printf '%d\n' "$userdate"`

しかし、それはうまくいきませんでした。この問題を解決するのに役立つ人に感謝します!

ベストアンサー1

次のように、bashの特定のベースに数値を強制的に適用できます。

$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100

一般的にフォーマットは$((base#value))

おすすめ記事