cat list.txt
1苹果4 30 f
2马铃薯2 40 v
3橙色5 10 f
4颗葡萄10 8 f
脚本:getlist ::
if [[ "$@" == *[f]* ]] ; then
awkv1 = $(grep f | awk '{ print $2 $3 }')
else
awkv1 = $(awk '{ print $2 $4 $5 }')
fi
cat list.txt | $(awkv1)
我有一个变量awkv1,它根据参数’f’存储值.
但这是行不通的.
运行:: getlist f不会执行任何操作.
它应该像这样工作:
如果在参数中传递了’f’,则:: cat list.txt | grep f | awk'{print $2 $3}’
否则:: cat list.txt | awk'{print $2 $4 $5}’
解决方法:
使用bash数组时,将部分命令行存储在字符串变量中更容易出错.
您可以像这样调整脚本:
#!/bin/bash
# store awk command line in an array
if [[ "$*" == *f* ]]; then
awkcmd=(awk '/f/{ print $2, $3 }')
else
awkcmd=(awk '{ print $2, $4, $5 }')
fi
# execute your awk command
"${awkcmd[@]}" list.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。