根据行中的位置在shell中解析

时间:2014-03-20 13:34:50

标签: bash shell parsing

我的脚本shell有一个小问题。

我们假设:

pos=80:1

我想在这个语法中使用这个变量:

while read line

  word=${line:pos}

done < file.txt

但那不起作用!

准确地说,word=$(line:80:1}工作正常。

1 个答案:

答案 0 :(得分:3)

将其拆分并独立传递项目。

pos=80:1
IFS=: read -r pos_start pos_len <<<"$pos"
word=${line:$pos_start:$pos_len}

参数扩展是语法,扩展结果仅作为数据解析,而不是语法,除非您使用eval。这是理想的,预期的行为 - 如果不是这样,就不可能在bash中编写安全代码。