我在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 ""
}
Run Code Online (Sandbox Code Playgroud)
在调试模式下,我可以看到传递的值:
+ name=topbeat.yml
++ awk -v file=topbeat.yml '-F|' '{if($1~/file/)print $2}' ps.conf
+ dest=
Run Code Online (Sandbox Code Playgroud)
但我没有得到它的价值dest,我希望它是/etc/topbeat/,在哪里
awk -F"|" '{if($1~/topbeat/)print $2}' ps.conf
Run Code Online (Sandbox Code Playgroud)
返回预期的O/P即 /etc/topbeat/
ps.conf
topbeat.yml|/etc/topbeat/
logstash.conf|/opt/monitor/tools/etc/
jmxd.tar|/opt/
Run Code Online (Sandbox Code Playgroud)
语法/pattern/只能用于文字,而不能用于变量.
你需要改变:
$1~/file/
Run Code Online (Sandbox Code Playgroud)
至:
$1 ~ file
Run Code Online (Sandbox Code Playgroud)
请注意,awk脚本的结构是condition { action },condition默认为1(true),{ action }默认为{ print }(打印整个记录$0).因此,您不需要使用if:
$1 ~ file { print $2 }
Run Code Online (Sandbox Code Playgroud)
另外,请记住始终引用您的变量:
awk -v file="$name" # ...
echo "$dest" # etc.
Run Code Online (Sandbox Code Playgroud)
通过几次更改,这将是最终结果:
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"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |