[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
2022-02-09 15:01:45
質問
ここで私の問題は、if文の中でシングルブラケット[ ]とダブルブラケット[[ ]]を使用することの違いを見つけることです。
#!/bin/bash
vara=08;
varb=10;
## single bracket in if statment is working.
if [ $vara -lt $varb ]; then
echo "yes";
else
echo "no";
fi
## double brackets in if statment is not working; throwing an error like below.
## [[: 08: value too great for base (error token is "08")
if [[ $vara -lt $varb ]]; then
echo "yes";
else
echo "no";
fi
解決方法は?
シェルは08を0から始まる8進数として解釈しようとします。しかし、8進数で許されるのは0~7桁だけで、10進数の8は8進数の010になります。従って、08は有効な数字ではなく、これがエラーの原因です。
シングルブラケットはshとの互換モードであり、shは8進数について知らないのです。
そのため、片角括弧を使用すると "010" は 10 と解釈され、両角括弧を使用すると "010" は 8 と解釈されることになるのです。
角括弧を1つだけ使用した場合、"08"は8と解釈され、角括弧を2つ使用した場合は有効な数字ではないのでエラーになります。
ここで紹介する解決策を使えば、エラーを回避することができます。 https://stackoverflow.com/a/12821845/1419315
if [[ ${vara#0} -lt ${varb#0} ]]
または
if [[ $((10#$vara)) -lt $((10#$varb)) ]]
関連
-
[解決済み] osx find exec rm find: exec: 不明な主またはオペレータ
-
[解決済み] find -exec cp {} でエラー 'find: missing argument to -exec' が発生した場合の解決策。TARGET_DIR + [閉店]。
-
[解決済み] etc/profileでVISIBLE=NOWを設定するのはなぜですか?
-
[解決済み] sed で二重引用符と単一引用符をエスケープするにはどうしたらいいですか?
-
[解決済み] cmake execute_process COMMAND [重複]。
-
[解決済み] docker alpine /bin/sh script.sh not found
-
[解決済み] awkシステムコール
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?
-
[解決済み] BashでDo-whileループをエミュレートする
-
[解決済み] 特定のコマンドを無視するBashのエラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】予期しないトークン 'fi' 付近の構文エラー
-
[解決済み】shでJenkinsのステージから他のステージに変数を渡す
-
[解決済み] systemd サービス 203/EXEC の失敗 (そのようなファイルやディレクトリがない) を修正する。
-
[解決済み] awk で行を飛ばすにはどうしたらいいですか?
-
[解決済み] プロジェクトからすべての .pyc ファイルを削除するにはどうすればよいですか?
-
[解決済み] パイプと二重パイプのどちらの OR 演算子を使うか?
-
[解決済み] ConcatenationとAppendの違いについて【終了しました
-
[解決済み] ファイル内の大文字・小文字を区別しない文字列を grep するには?
-
[解決済み] Bash - "fi ;;" の使い方は?
-
[解決済み] シェルスクリプトでの連想配列