Chinaunix

标题: 13问的第4问---再问 [打印本页]

作者: 月波无漾    时间: 2006-12-27 23:33
标题: 13问的第4问---再问
随手点开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
复制代码

但这个结果怎么来的呢?
上面理解有错的地方也欢迎指正
作者: 月波无漾    时间: 2006-12-27 23:34
郁闷啊,加班,而且是12点以后才开始干活.
作者: helo_aBiNg    时间: 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的输出结果。
呵呵,楼主慢慢想吧,我先睡去了。。。
作者: Edengundam    时间: 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\"}"
复制代码

作者: 月波无漾    时间: 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 编辑 ]
作者: 網中人    时间: 2006-12-28 01:20
你的 awk 是甚麼版本?
awk --version
作者: Edengundam    时间: 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}"
复制代码

作者: awk就是awp加ak    时间: 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;
}
作者: 月波无漾    时间: 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] ...
作者: Edengundam    时间: 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 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2