awkサブストリングインデックス0

awkサブストリングインデックス0

substr()awkが文字列の最初のインデックスとして0または1を受け入れることがわかりました。私はこれをGawk 5.1.0とMacOS awk 20070501でテストしました。

awk 'BEGIN {print substr("abcd", 0, 1)}'

「a」を出力します。同じ

awk 'BEGIN {print substr("abcd", 1, 1)}'

そして

awk 'BEGIN {print substr("abcd", 2, 1)}'

出力 "b" は明らかに間違ったことがないことを示すためのものです。

1 indexに言及する以外は、ページやGawkファイルにはman何も表示されません。info

文書の一貫性を維持し、index()最初の位置が1を返し、不一致が0を返すことを考慮すると、常に1を使用するのが最善です。

私の質問はなぜこのような二重性が発生するのかです。また、どこかに文書化されていますか?これを実行できる他のawk実装はありますか?

ベストアンサー1

~からGNU awk オンライン文書: "substr() 関数":

もしスタート1より小さい場合、substr()はそれを1として扱います。 (POSIXはこの場合何をすべきかを指定しません。BWK awkが実行するので、gawkも実行します。)スタート文字列の文字数より大きい場合、substr()は空の文字列を返します。同様に、長さ存在するが 0 以下の場合は空の文字列が返されます。

おすすめ記事