我要写的shell脚本的目的是将文件$file中带有Author:$name的行删除,name的范围是name_for_deal的变量中,但是写了下面的语句之后,发现并没有生效,求专家指点一二。
for name in "${name_for_deal[@]}"; do
sed -i '/^[ \t\*]*Author[ \t]*:[ \t]*${name}/d' $file
done
1. "${name_for_deal[@]}" 去掉双引号。因为 for A in B 结构中,B是一个以空格分隔的数据集合。而加了双引号就被当做一个整体字符串了。
2. sed的单引号会屏蔽$的取值功能,shell变量${name}要得到解析必须拿到单引号外面来。即,在${name}前闭合单引号,之后再重新开始。
sed -i '/^[ \t\*]*Author[ \t]*:[ \t]*'${name}'/d' $file