![为什么 POSIX 在 awk 中未指定“$(表达式)”?](https://linux22.com/image/80787/%E4%B8%BA%E4%BB%80%E4%B9%88%20POSIX%20%E5%9C%A8%20awk%20%E4%B8%AD%E6%9C%AA%E6%8C%87%E5%AE%9A%E2%80%9C%24(%E8%A1%A8%E8%BE%BE%E5%BC%8F)%E2%80%9D%EF%BC%9F.png)
回答这个问题,我发现:
echo 1 2 | awk '{print $(expression)}'
返回值表达未指定。它可能会导致混乱,就好像表达是一个未初始化的变量,应该$(expression)
返回0
(在数字上下文中计算)或返回空字符串""
(在字符串上下文中计算)或引发错误。
从那时起,字段变量被定义为:
字段变量应由“$”后跟数字或数值表达式来指定
为什么 POSIX 保留返回值任何表达遵循$
未指定?是历史原因还是其他原因?
答案1
POSIX 努力将现有实践编纂成法典,并且只在不可避免的情况下开辟新天地(是的,这对你来说是事后标准;-)。由于 Unix 代码从来都不是一致性的缩影(例如,原始 vi(1) 返回一个完全随机的退出代码,大概是为了在关键时删除可执行文件的几个字节),被数百个不同的组所采用,根据不同的议程进行修改,产生克隆(如 GNU,还有其他几个),许多内容未定义以涵盖各种随机行为。