次のように文字列を切り捨てるために '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日現在)はバイト単位で計算され、-c
Solarisまたはkshはcut
POSIXが要求するように文字単位で計算されることです。
$ 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バイトを使用します。)