设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
再问awk利用外部变量[脚本解决]
1
2
/ 2 页
下一页
返回列表
查看:
1103
|
回复:
12
再问awk利用外部变量[脚本解决]
[复制链接]
yongjian
yongjian
当前离线
积分
2576
IP卡
狗仔卡
发表于 2004-6-24 11:21:03
|
显示全部楼层
|
阅读模式
str=aa
echo | awk '{print "this is '$str'"}'
this is aa
复制代码
变一下,
str="aa bb"
echo | awk '{print "this is '$str'"}'
awk: cmd. line:1: {print "this is aa
awk: cmd. line:1: ^ unterminated string
复制代码
是不是awk不支持带有空格的变量呢?我的awk版本是:GNU Awk 3.1.3
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2004-6-24 11:37:45
|
显示全部楼层
/home/lee #awk -v str="aa bb" 'BEGIN{print str}'
aa bb
复制代码
回复
支持
反对
使用道具
举报
显身卡
yongjian
yongjian
当前离线
积分
2576
IP卡
狗仔卡
楼主
|
发表于 2004-6-24 20:50:25
|
显示全部楼层
付值后是可以了. 不知为什么一种方法不行呢? awk不是可以直接引用的吗?
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2004-6-24 21:07:17
|
显示全部楼层
是shell和awk的默认的输出分隔符有关吧:
/home/lee #echo $IFS
/home/lee #str="aa bb cc"
/home/lee #awk 'BEGIN{print "'$str'"}'
awk: cmd. line:1: BEGIN{print "aa
awk: cmd. line:1: ^ unterminated string
/home/lee #IFS=
/home/lee #awk 'BEGIN{print "'$str'"}'
aa bb cc
复制代码
回复
支持
反对
使用道具
举报
显身卡
yongjian
yongjian
当前离线
积分
2576
IP卡
狗仔卡
楼主
|
发表于 2004-6-24 22:27:57
|
显示全部楼层
哦,原来是这样。 lee兄, 那么在默认的IFS情况下, awk将外部变量str如何处理了呢?当IFS=(清空)后, awk对变量处理的变化又是什么呢?谢谢指教!
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2004-6-24 22:48:24
|
显示全部楼层
晕!~~~
我感觉是shell的内部域分隔符的问题,我认为当把IFS清空后,awk则把含有空格的变量$str的内容当成了一个整体来处理的,因为我们知道
shell命令行默认的分隔符是空格,tab,换行符,清空后的分割符就不是空格和tab了,而变量$str里的空格也不具备IFS的属性,而是普通的字符!
..感觉绕地慌 ;) ,还是让教主来解释解释吧,呵呵呵呵
回复
支持
反对
使用道具
举报
显身卡
yongjian
yongjian
当前离线
积分
2576
IP卡
狗仔卡
楼主
|
发表于 2004-6-25 04:27:55
|
显示全部楼层
有点明白。主要是awk如何看待这个变量的问题...(理解中)
回复
支持
反对
使用道具
举报
显身卡
home_king
home_king
当前离线
积分
2759
IP卡
狗仔卡
发表于 2004-6-25 11:13:31
|
显示全部楼层
javalee老兄说得不错。但我也不知道awk解析bash变量的过程是怎样。
建议看看awk的相应部分源代码。
回复
支持
反对
使用道具
举报
显身卡
yfreedom
yfreedom
当前离线
积分
64
IP卡
狗仔卡
发表于 2006-5-17 20:47:41
|
显示全部楼层
[20:41:38@~]$ awk -v str="aa b c " 'BEGIN{print str}'
aa b c
[20:41:57@~]$ awk -v str="aa b c " '{print str}'
[20:42:10@~]$ awk -v str="aa b c " 'END{print str}'
后两者就没有输出,awk里自定义的变量只能在BEGIN里用吗??请弟兄们为我解惑阿?
回复
支持
反对
使用道具
举报
显身卡
lastart
lastart
当前离线
积分
913
IP卡
狗仔卡
发表于 2006-5-17 21:04:29
|
显示全部楼层
是因为没有文件给awk打开,所以只执行了BEGIN吧?
/tmp$ str="aa bb"
/tmp$ echo |awk '{print "this '"$str"'"}'
this aa bb
复制代码
$str两边再加上双引号就可以了。
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
BSD 讨论专题
红旗 REDFLAG Linux
开源软件专题讨论
Redhat/Fedora/CentOS Linux
Debian Linux
服务器架设、应用、维护
Archlinux讨论区
Ubuntu Linux 专题讨论
LFS(LinuxfromScratch)
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表