Bash Awk字段变量与函数参数冲突

Bash Awk字段变量与函数参数冲突,bash,awk,Bash,Awk,My函数接收变量作为参数,例如: function do() { eval "TEST=$1" } 现在我想在同一个函数中解析一些数据: function do() { eval "TEST=$1" tail -n+3 file.txt | awk '$1 ~ "[0-9]$" {print "/dev/"$1}' } 问题是awk与传递给函数的参数冲突了它自己的字段分隔符“$1”。 有没有一种方法可以在不使用全局变量作为参数的情况下解决此问题?使用-v选项声明一个awk变

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

function do()
{
  eval "TEST=$1"
}
现在我想在同一个函数中解析一些数据:

function do()
{
   eval "TEST=$1"
   tail -n+3 file.txt | awk '$1  ~ "[0-9]$" {print "/dev/"$1}'
}
问题是awk与传递给函数的参数冲突了它自己的字段分隔符“$1”。

有没有一种方法可以在不使用全局变量作为参数的情况下解决此问题?

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

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

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

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

在单引号中,
$1
表示awk中的字段1。
eval
在这里不是必需的;使用
声明“TEST=$1”
代替。请参阅
-v
选项将变量传递给awk脚本实际上,不清楚为什么
TEST=$1
是不够的。单引号内的可能重复,
$1
表示awk中的字段1。
eval
在这里是不必要的;改为使用
声明“TEST=$1”
。请参阅
-v
选项将变量传递给awk脚本实际上,不清楚为什么
TEST=$1
不够。awk中可能重复的regexp分隔符是
/
,而不是
。您只能使用
-如果您心中有一个特定的目标,并且完全理解注意事项,则在RE上下文中使用分隔字符串。这在本例中不适用,因此您应该将测试更改为
$1~/[0-9]$/
。awk中的regexp分隔符是
/
,而不是
。如果您心中有一个特定的目标,并且完全理解注意事项,那么您只能在RE上下文中使用
”分隔的字符串。这在本例中不适用,因此您应该将测试更改为
$1~/[0-9]$/