私はコマンドラインで16進数を変換する方法を探していましたが、非常に簡単な方法があることに気づきましたecho $((0x63))
。
うまくいきますが、ここで何が起こっているのか少し混乱しています。
私はそれが$(...)
通常、外部コマンドの前に内容が評価されるサブシェルであることを知っています。
この場合でもまだサブシェルですか?私はそうではないと思います。なぜなら、それはサブシェルが(0x63)
どれがコマンドではないかを評価することを意味するからです。
誰かがこのコマンドを分析するのに役立ちますか?
ベストアンサー1
$(...)
コマンド置換(サブシェルだけでなく)であり、$((...))
算術拡張でもあります。
使用すると、$((...))
算術式...
として解釈されます。これは、何よりも16進文字列が数値として解釈され、10進数に変換されることを意味します。その後、式全体が式が評価される数値に置き換えられます。
パラメータの拡張やコマンドの置換と同様に、$((...))
シェルの単語の区切りやファイル名のグロービングの影響を受けないように、引用符で囲む必要があります。
echo "$(( 0x63 ))"
ちなみに、算術式に現れる変数には必要ありません$
。
$ x=030; y=30; z=0x30
$ echo "$(( x + y +x ))"
78