wcはUnixとLinuxで異なる動作をします。

wcはUnixとLinuxで異なる動作をします。

値をエコーし​​、文字数を計算するためにLinuxとSunOS(Unix)で「wc -c」を使用しようとしたときに、他の結果が発生しました。

root@SunOS-machine:~# echo "1" | wc -c
       2
root@Linux-machine:/# echo "1" | wc -c
2

Unixシステムには先行スペースが追加されているようです。

root@SunOS-machine:~# echo "1" | wc -c | wc -c
       9
root@Linux-machine:/# echo "1" | wc -c | wc -c
2

Unixシステムで処理する先行スペースを削除するスクリプトを更新しています。

私の問題は、Unixシステムでこれらの動作を理解することです。これがUnixシステムのデフォルト設定ですか?

ベストアンサー1

~によるとhttp://pubs.opengroup.org/onlinepubs/9699919799/:

デフォルトでは、標準出力には次の形式の各入力ファイルのエントリを含める必要があります。

"%d %d %d %s\n", <newline>, <word>, <byte>, <file>

-mオプションを指定すると、この形式の<bytes>フィールドは文字数に置き換えられます。

オプションを指定し、-l オプションを指定しないと、<newline> 個の文字は記録されません。

オプションを指定し、-w オプションを指定しないと、ワード数は記録されません。

オプションが指定されているが -c または -m が指定されていない場合、バイト数または文字数は記録されません。

入力ファイルのオペランドが指定されていない場合は、名前を使用しないでください。パス名の前にある<スペース>文字も使用しないでください。

複数の入力ファイルオペランドが指定されている場合は、他の行も他の行と同じ形式で作成しますが、パス名の代わりにtotal(POSIXロケール)という単語を作成し、各列の合計を適切に作成する必要があります。これらの追加行(存在する場合)は出力の末尾に書き込まれます。

したがって、両方の実装は厳密に準拠していないようです。標準に 2 つの先行スペースがなければならないと明示されているようです。標準は楽しいです。

おすすめ記事