免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1432 | 回复: 9
打印 上一主题 下一主题

13问的第4问---再问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-27 23:33 |只看该作者 |倒序浏览
随手点开13问,看到4) " "(双引号) 与 ' '(单引号)差在哪?忽生疑问
  1. $ echo $0      
  2. -sh
复制代码

这样显示的当前的所登陆的sh的名字;
  1. $ echo "aaa bbb"|awk "{print \$0}"
  2. aaa bbb
复制代码

这样可以正确打印出整行
  1. $ echo "aaa bbb"|awk "{print $1}"
  2. sh: 1: Parameter not set.
复制代码

soft quote ,$1进行变量替换,未定义,并且不是awk内置变量;
  1. $ echo "aaa bbb"|awk "{print $0}"
  2. -0
复制代码

但这个结果怎么来的呢?
上面理解有错的地方也欢迎指正

论坛徽章:
0
2 [报告]
发表于 2006-12-27 23:34 |只看该作者
郁闷啊,加班,而且是12点以后才开始干活.

论坛徽章:
0
3 [报告]
发表于 2006-12-27 23:40 |只看该作者
  1. $ echo "aaa bbb"|awk "{print $0}"

  2. $ echo "aaa bbb"|awk "{print $1}"
  3. aaa bbb
  4. $ echo "aaa bbb"|awk "{print \$0}"
  5. aaa bbb
  6. $ echo $0
  7. bash
复制代码

这个是bash的输出结果。
呵呵,楼主慢慢想吧,我先睡去了。。。

论坛徽章:
0
4 [报告]
发表于 2006-12-27 23:53 |只看该作者
$0 ==> 某个字符串
这个字符串是awk里面没有定义的变量, 就是个空串.

  1. $echo "$0"
  2. bash
  3. $echo "aaa bbb" | awk "{print $0 \"ABCD\"}" # the same with next cmd
  4. $echo "aaa bbb" | awk "{print bash \"ABCD\"}"
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-12-28 00:56 |只看该作者
原帖由 Edengundam 于 2006-12-27 23:53 发表
$0 ==> 某个字符串
这个字符串是awk里面没有定义的变量, 就是个空串.

$echo "$0"
bash
$echo "aaa bbb" | awk "{print $0 \"ABCD\"}" # the same with n ...

  1. $ echo "aaa bbb" | awk "{print $0 \"ABCD\"}"
  2. -0ABCD
  3. $$ echo "aaa bbb" | awk "{print -sh \"ABCD\"}"
  4. -0ABCD
复制代码


这个-0怎么来的啊

[ 本帖最后由 月波无漾 于 2006-12-28 01:01 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-12-28 01:20 |只看该作者
你的 awk 是甚麼版本?
awk --version

论坛徽章:
0
7 [报告]
发表于 2006-12-28 07:22 |只看该作者
原帖由 月波无漾 于 2006-12-28 00:56 发表


  1. $ echo "aaa bbb" | awk "{print $0 \"ABCD\"}"
  2. -0ABCD
  3. $$ echo "aaa bbb" | awk "{print -sh \"ABCD\"}"
  4. -0ABCD
复制代码


这个-0怎 ...


'-'算术运算, sh当成了数值变量, 初始值 0

  1. $ echo aab | awk "BEGIN{sh = 100} {print -sh}"
复制代码

论坛徽章:
0
8 [报告]
发表于 2006-12-28 09:48 |只看该作者
原帖由 網中人 于 2006-12-28 01:20 发表
你的 awk 是甚麼版本?
awk --version

我测试HP-UX 11.0里面的awk。
和楼上差不多,

gawk 认为:

function gawkMinusOperator(var){
  if (!isNumber(var)) var = 0;
  return var <= 0 ? abs(var) : 前面带负号的var;
}

awk认为:

function awkMinusOperator(var){
  if (!isNumber(var)) var = 0;
  return var < 0 ? abs(var) : 前面带负号的var;
}

论坛徽章:
0
9 [报告]
发表于 2006-12-28 13:28 |只看该作者
原帖由 Edengundam 于 2006-12-28 07:22 发表


'-'算术运算, sh当成了数值变量, 初始值 0

  1. $ echo aab | awk "BEGIN{sh = 100} {print -sh}"
复制代码

谢谢,似乎正是你说的那样.
可不可以这样理解呢?对于一个awk之前未定义的变量,默认都是当成NULL,然后进行算术运算,就类型转换成数值类型的的默认值0了?
BTW:我这里用的HP UX,连看个命令的版本都不知道怎么看的。
$ awk --version                                                
Usage: awk [-F fs][-v Assignment][-f Progfile|Program][Assignment|File] ...

论坛徽章:
0
10 [报告]
发表于 2006-12-28 13:42 |只看该作者
原帖由 月波无漾 于 2006-12-28 13:28 发表

谢谢,似乎正是你说的那样.
可不可以这样理解呢?对于一个awk之前未定义的变量,默认都是当成NULL,然后进行算术运算,就类型转换成数值类型的的默认值0了?
BTW:我这里用的HP UX,连看个命令的版本都不知道怎么看的 ...



有时候做实验最好^_^其实我也不知道...

我想这些例子够了, 和C的库函数中特性差不多, 尽可能把字符串解析成数值. 不能解释就返回个0.
BTW: 能man否? -v -version -? -help --help这些组合都试试

  1. Administrator@TMA ~
  2. $ awk 'BEGIN{a="abc"; print -a}'
  3. 0
  4. Administrator@TMA ~
  5. $ awk 'BEGIN{a="1abc"; print -a}'
  6. -1
复制代码

[ 本帖最后由 Edengundam 于 2006-12-28 13:43 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP