Unixのコマンドカット範囲

Unixのコマンドカット範囲

次のように文字列を切り捨てるために 'cut' unixコマンドを使用するシェルスクリプトを作成しようとしています。

namecmpaux=$(echo $namecmp |cut -c0-19)

ただし、シェルを実行すると、次のエラーが発生します。

cut: fields and positions are numbered from 1 
Try `cut - help 'for more information.

以前は 'cut' コマンドを使って下限位置に 0 を使った記憶がありました。なぜ?オペレーティングシステムによって異なりますか?以前はSunOSを使用していましたが、Ubuntu 12.04を使用していました。

ベストアンサー1

いいえ、すべての実装で同じですcut。数字は1から始まります。 0を提供して1として扱っても、Solarisは文句を言いません。0そしてそこはすべて1最初の文字を表し、2そこは2番目の文字を表します。

$ echo test | cut -c 0-2
te
$ echo test | cut -c 1-2
te

busybox cutまたは、cut組み込みの機能について文句を言わないでくださいksh93。 GNUは、cutおそらくあなたが最初のインデックスについて正しい考えを持っていないかもしれないことを知らせることによってあなたを助けようとします。

ただし、実際の違いは、GNUとbusybox cut(少なくとも2014年3月27日現在)はバイト単位で計算され、-cSolarisまたはkshはcutPOSIXが要求するように文字単位で計算されることです。

$ echo 'Stéphane' | cut -c 1-4
Sté
$ echo 'Stéphane' | busybox cut -c 1-4
Sté
$ echo 'Stéphane' | ksh -c 'command /opt/ast/bin/cut -c 1-4'
Stép

(UTF-8ロケールでは、é(U + 00E9)は2バイトを使用します。)

おすすめ記事