bashは改行文字を読み取り、printfは文字0を報告します。

bashは改行文字を読み取り、printfは文字0を報告します。

bashprintf関数を使用して入力ファイル内の文字のASCIIコードを印刷しますが、何らかの理由でprintf出力LF文字に10の代わりにASCIIコード0が表示されます。どんなアイデアがありますか?

while IFS= read -r -n1 c
do
ch=$(LC_CTYPE=C printf "%d\n" "'$c") # convert to integer
echo "ch=$ch"
done < input_file_name

printf正直なところ、これが問題なのか、それとも関数が間違ったLF値を提供しているのかはわかりませんread... bashコマンドを使用して文字をASCIIに変換する別の方法はありますか?

ベストアンサー1

まず、printf機能は完全に機能します。

$ export c=" "
$ LC_CTYPE=C printf "%d\n" "'$c"
32

ただし、-vxを使用してスクリプト行を実行すると、その行に到着するデータが正しくないことがわかります(この出力は貼り付けません)。

だから私はそれが読み取りエラーだと思います。読み取り用のデフォルトのEOL区切り文字は改行文字なので変更してみました。これは効果があると思います。

while IFS= read -d\0 -r -n1 c; do ch=$(LC_CTYPE=C printf "%d\n" "'$c") ; echo "ch=$ch"; done < input_file_name

おすすめ記事