私はMacを使用しています。 BashはBase64文字列をデコードしてから16進値を出力しようとします。コマンドを使用してbase64 -d
変数に割り当てています。
myText='YYN29+2wV2XRAHymIyhgytWuqY4atgHnIUFfXA7FPOA='
myTextBytes=$(echo -n "$myText" | base64 --decode)
echo -n $myTextBytes | xxd -p -c 99999
上記のスクリプトの出力は次のとおりです。
618376f7edb05765d17ca6232860cad5aea98e1ab601e721415f5c0ec53ce0
ただし、次のコマンドを直接実行すると:
echo -n "$myText" | base64 --decode | xxd -p -c 100000
私は得る:
618376f7edb05765d1007ca6232860cad5aea98e1ab601e721415f5c0ec53ce0
私も試してみて、openssl enc -base64
同じ結果を得ました。つまり、00
変数に代入すると削除されます。00
変数に割り当てるときはどのように保持しますか?
ベストアンサー1
これは、2つの0x30文字(ASCII "0")で構成される文字列の "00"ではなく、NUL文字0x00です。デコードコマンドの出力をまたはにインポートすると、od -a
この内容が表示されますod -x
。
Bashのコマンド置換処理(例:)はvar1=$( command )
NUL / 0x00文字を削除します。ただし、Bash 4.4以降では警告も印刷されます。 NULバイトを処理できないことは、ほとんどのシェルの制限であり、zshは例外です。しかし、まだ影響を受けるzshコマンドの引数に含まれる0x00文字を渡すのに問題があります(zshの問題ではなく、コマンドへのexec()シリーズ呼び出しの問題であるため)。
Perl、Python、Rubyなどの他の言語に切り替えたくない場合は、zshを使用することをお勧めします。