如果我有以下 bash 变量:
$ echo "${pos}"
201
719
744
205
354
...以下产生...
!#bin/bash
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]}
}
'
)
-----------------
$ ./myscript.sh
201
719
744
205
354
...但是然后做...
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]+10}
}
'
)
------
./myscript.sh
211
...所以添加有效,但没有打印所有元素的结果。为什么不?
答案1
这是你的 IFS=: 设置不正确。因此 split() 不会用值填充数组,而是用 str2 的一个值填充它,因此在 for 循环中,您打印 b[i] 但实际上打印一次 b[1] 这是整个 str2 并且因为它有新行你认为它打印了数组 b 的成员,但如果你检查 split() 的 retrn 值,它是 1。删除 IFS=: 并且你的脚本应该正常工作。