Shell 为什么awk-v不工作

Shell 为什么awk-v不工作,shell,awk,Shell,Awk,我在shell中有一个函数: ConfigHandler(){ name=$1 dest=`awk -v file=$name -F"|" '{if($1~/file/)print $2}' ps.conf` echo $dest echo "Moving $1 to $dest ...." mv `pwd`/$1 $dest/$1 echo "" echo "" } 在调试模式下,我可以看到传递的值: + name=topbeat.ym

我在shell中有一个函数:

ConfigHandler(){
    name=$1
    dest=`awk -v file=$name -F"|" '{if($1~/file/)print $2}' ps.conf`
    echo $dest
    echo "Moving $1 to $dest ...."
    mv `pwd`/$1 $dest/$1
    echo ""
    echo ""
}
在调试模式下,我可以看到传递的值:

+ name=topbeat.yml
++ awk -v file=topbeat.yml '-F|' '{if($1~/file/)print $2}' ps.conf
+ dest=
但是我没有得到dest的值,我希望它是/etc/topbeat/,其中

  awk -F"|" '{if($1~/topbeat/)print $2}' ps.conf
返回预期的O/p,即/e/etc/topbeat/

ps.conf

语法/pattern/只能用于文本,不能用于变量

您需要更改:

$1~/file/
致:

请注意,awk脚本的结构是条件{action},其中条件默认为1 true,{action}默认为{print}打印整个记录,$0。因此,您不需要在以下情况下使用:

此外,请记住始终引用您的变量:

awk -v file="$name" # ...
echo "$dest" # etc.
再进行几次更改,最终结果将是:

ConfigHandler(){
    dest=$(awk -v file="$1" -F"|" '$1 ~ file { print $2 }' ps.conf)
    printf 'Moving %s to %s...\n\n\n' "$1" "$dest"
    mv "$1" "$dest"
}
语法/pattern/只能用于文本,不能用于变量

您需要更改:

$1~/file/
致:

请注意,awk脚本的结构是条件{action},其中条件默认为1 true,{action}默认为{print}打印整个记录,$0。因此,您不需要在以下情况下使用:

此外,请记住始终引用您的变量:

awk -v file="$name" # ...
echo "$dest" # etc.
再进行几次更改,最终结果将是:

ConfigHandler(){
    dest=$(awk -v file="$1" -F"|" '$1 ~ file { print $2 }' ps.conf)
    printf 'Moving %s to %s...\n\n\n' "$1" "$dest"
    mv "$1" "$dest"
}

哦我的错。谢谢!我的错。谢谢