base64を使用して文字列を28回エンコードするスクリプトを作成しました。その後、出力文字列に文字数を表示したいと思います。
${#var}
最初はそれを使って34070を得ました。
それから同じロープを使ってみました。
script.sh | wc -c
これは私に34071を与えます。
#!/bin/bash
var="9M"
for i in {1..28};do
var=$(echo $var | base64)
done
echo ${#var}
これら2つの出力は正確にどのように違いますか?
答え1
この例に示すように、show bytes コマンドを使用すると、od
改行文字が印刷されます。
$エコfoo OD-CB | 0000000 金持ち \N 146157157012 0000004
したがって、この場合は改行文字wc -c
も計算されます。wc -m
改行なし:
$ echo -n foo | od -c -b
0000000 f o o
146 157 157
0000003
したがって、を使用している場合は、改行文字を印刷しないように適切echo
なオプションを追加するか、次の手順を実行します。-n
printf
$ printf "%s" foo | od -c -b
0000000 f o o
146 157 157
0000003
答え2
追加の文字は改行文字です。たとえば、次のようにするとこれを見ることができます。
echo $var | hd | tail