Awk

awk substr 索引 0

  • June 29, 2022

我剛剛發現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 索引之外,我在man頁面或 Gawk文件中沒有看到任何內容。info

為了與文件保持一致,並考慮index()到第一個位置返回 1 和不匹配返回 0 的事實,始終使用 1 是一個好策略。

我的問題是為什麼會出現這種二元性?另外,它是否記錄在某處?是否有其他 awk 實現可以做到這一點?

來自GNU awk 線上文件:‘substr() function’

如果start小於 1,則 substr() 將其視為 1。(POSIX 沒有指定在這種情況下要做什麼:BWK awk 這樣做,因此 gawk 也這樣做。)如果start大於字元串中的字元數,則 substr() 返回空字元串。類似地,如果存在長度但小於或等於零,則返回空字元串。

引用自:https://unix.stackexchange.com/questions/707920