指定されたフィールドが存在しない場合、カットは何を返しますか?

指定されたフィールドが存在しない場合、カットは何を返しますか?

文字列があります。

6.40.4

第二:

6.40

私はvar=$(echo $versionfull | cut -d'.' -f3)bashの最初の文字列から3番目の数字を得ました。このコマンドは、2番目のコマンドに対して何を返しますか?空のように見えますが、[ -z $var ]動作しません[ $var == "" ]02番目の文字列がある場合は値を指定したいと思います。

ベストアンサー1

cut奇妙なAPIがあります。

cut -f n1行に1つ以上の区切り文字を含むn番目のフィールドを出力し行にn-1区切り文字未満(nフィールド未満)がある場合は空)、行全体を返します。最初フィールド)区切り文字がない場合:

$ echo a.b.c | cut -d. -f3
c
$ echo a.b | cut -d. -f3

$ echo a | cut -d. -f3
a

だから答えは指定されたフィールドが存在しない場合、カットは何を返しますか?入力行にフィールドが 1 つ以上あるかどうかに応じて、最初のフィールドまたは空のフィールドです。

-sオプションを追加できます。削除する区切り文字のない行は上記の奇妙な最後のケースを避けますが、一般的に望むものではありません(通常、入力行を完全にスキップするのではなく、空の3番目のフィールドを持つと見なしています)。最初のフィールドが必要な場合ははるかに悪いです。フィールド:

$ echo a | cut -sd. -f2
$ echo a | cut -sd. -f1
$

(最初のフィールドを要求すると、入力にフィールドは1つしかありませんが、入力に区切り文字がないため、出力は出ません。)

したがって、@ThoriumBRの追加の提案は.0とても良いです。それなしで:

versionfull=5
echo "$versionfull" | cut -d. -f3

実際には5が出力されます。を追加すると、.0入力に少なくとも1つの区切り文字があることが確認されます。私はさらに一歩進み、次のものを使います。

echo "$versionfull.0.0" | cut -d. -f3

入力に3つ以上のフィールドがあることを確認してください。各フィールドが切り捨てられるため、$versionfull改行文字やバックスラッシュ文字自体が含まれていないとします。cutワイヤー\n)の多くの実装は、入力を改行文字に変換しますecho

おすすめ記事