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 以下の場合は空の文字列が返されます。