我的脚本shell有一个小问题。
我们假设:
pos=80:1
我想在这个语法中使用这个变量:
while read line
word=${line:pos}
done < file.txt
但那不起作用!
准确地说,word=$(line:80:1}
工作正常。
答案 0 :(得分:3)
将其拆分并独立传递项目。
pos=80:1
IFS=: read -r pos_start pos_len <<<"$pos"
word=${line:$pos_start:$pos_len}
参数扩展是语法,扩展结果仅作为数据解析,而不是语法,除非您使用eval
。这是理想的,预期的行为 - 如果不是这样,就不可能在bash中编写安全代码。