Example 9-23 传递一个间接引用给awk
################################Start
Script#######################################
#!/bin/bash
# "column totaler"脚本的另一个版本
#+ 这个版本在目标文件中添加了一个特殊的列(数字的).
# 这个脚本使用了间接引用.
ARGS=2
E_WRONGARGS=65
if [ $# -ne "$ARGS" ] # 检查命令行参数是否是合适的个数.
then
echo "Usage: `basename $0` filename column-number"
exit $E_WRONGARGS
fi
filename=$1
column_number=$2
#===== 上边的这部分,与原来的脚本一样 =====#
# 一个多行的awk 脚本被调用,通过 ' ..... '
# awk 脚本开始.
# ------------------------------------------------
awk "
{ total += \$${column_number} # 间接引用.
}
END {
print total
}
" "$filename"
# ------------------------------------------------
# awk 脚本结束.
# 间接的变量引用避免了在一个内嵌的awk 脚本中引用
#+ 一个shell 变量的问题.
# Thanks, Stephane Chazelas.
exit 0
################################End
Script#########################################
注意: 这个脚本有些狡猾.如果第2 个变量修改了它的值,那么第一个变量必须被适当的解引用
(像上边的例子一样).幸运的是,在Bash 版本2 中引入的${!variable}(参见Example 34-2)
是的间接引用更加直观了.
注意: Bash 并不支持指针的算术运算,并且这严格的限制了间接引用的使用.事实上,在脚本语言
中,间接引用本来就是丑陋的部分.
阅读(1433) | 评论(0) | 转发(0) |