2017-07-18 23 views
1

$(date +%H)は午前1時から午前9時に基数8を返すという難しい方法を見つけました。いいえ大したことは、私はそれを書いてベース10の数字になることを余儀なくされました:$((10#$(date +%H))) ...ここで私の問題は、エラーをスロー "-bash:9:コマンドが見つかりませんでした"しかし、私はecho $((10#$(date +%H)))と言う場合適切な数。これがなぜ起こるのか?そして、それをどうやって修正しようか?ありがとうベース10がBASHで正しく動作していない

答えて

3

dateのバリアントがかなり最近のものである場合には、変更または無効にパディングをmanページあたりのような形式修飾子があります。ゼロで

デフォルトで

dateパッド数値フィールド。次のオプション・フラグが%に従うことがあります。

  • -(ハイフン)は、パッドフィールドません。
  • _(スペース)のパッド。
  • 0(ゼロ)パッドがゼロである。

そこで私がしようとするだろう最初事はdate -%-Hだろう。これは、パディングなしで時間を与えるはずです。あなたは古代のdateバリアントを持っているオフのチャンスで

、あなたのようなもので(時間に応じて、単一または二桁)実際を取得することができます:

((hr = 1$(date +%H) - 100)) 

1$(date +%H)はあなたを与えるだろう100123の間の値は、100を減算して数値の時間を示します。

は例えば、午前4時23分午前で、これは、date +%Hから04を取る数4を取得するには、その後100を引く104にその電源を入れます。

9より大きい数値も使用できます。午後4時42分には16date +%Hから116に変わり、100を引いて16になります。あなたはあなたの中に実行可能9どこかを持っていない限り、あなたがエラーを取得している理由は、コマンド$((10#$(date +%H)))9に評価(仮定時間が09:xxである)、その後、ちょうどそれを実行しようとする点で


(パス、エラーになります)。

echoを接頭辞として使用すると、echo 9というコマンドが実行されます。は、です。

ご覧のとおり、エコーする必要はありませんが、後で使用できるように変数(上のhrなど)に保存できます。

+0

実際にスクリプト内で何が起こるか説明できますか? – ConfuzzledandPuzzled

+0

@ConfuzzledandPuzzled、うまくいけば、アップデートでは、あなたはあまり疎外されないかもしれません:-) – paxdiablo

+0

ありがとう、私の質問のスクリプトでエコーを除外する理由を知っていますか? – ConfuzzledandPuzzled

関連する問題