Shell 为什么awk-v不工作
我在shell中有一个函数: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
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"
}
哦我的错。谢谢!我的错。谢谢