【问题标题】:Awk field variable clash with function argumentawk 字段变量与函数参数冲突
【发布时间】:2014-12-10 17:30:25
【问题描述】:

我的函数接收变量作为参数,例如:

function do()
{
  eval "TEST=$1"
}

现在我想在同一个函数中解析一些数据:

function do()
{
   eval "TEST=$1"
   tail -n+3 file.txt | awk '$1  ~ "[0-9]$" {print "/dev/"$1}'
}

问题是 awk 与传递给函数的参数冲突了它自己的字段分隔符“$1”。
有没有办法在不使用全局变量作为参数的情况下解决它?

【问题讨论】:

  • 在单引号内,$1 表示 awk 中的第一个字段。
  • eval 在这里不是必需的;请改用declare "TEST=$1"
  • 查看-v 选项以将变量传递给 awk 脚本
  • 其实还不清楚为什么TEST=$1不够用。
  • Using awk with variables 的可能重复项

标签: bash awk


【解决方案1】:

使用-v 选项声明一个awk 变量来保存函数参数的值。

function do()
{
   TEST=$1
   tail -n+3 file.txt | awk -v test="$TEST"  '$1 ~ /[0-9]$/ {print "/dev/"test}'
}

【讨论】:

  • awk 中的正则表达式分隔符是/,而不是"。如果您有特定的目标并完全理解注意事项,则只能在 RE 上下文中使用 "-delimited 字符串。这不适用于这种情况,因此您应该将测试更改为$1 ~ /[0-9]$/
猜你喜欢
  • 2012-04-27
  • 1970-01-01
  • 2014-08-17
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
相关资源
最近更新 更多