免费注册 查看新帖 |

Chinaunix

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

大家说说这是为什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-05 19:12 |只看该作者 |倒序浏览
脚本1:
  1 ${file="file_name"}
  2
  3 echo "file=$file"
  4

脚本2:
  1 : ${file="file_name"}
  2
  3 echo "file=$file"
  4

说明:
       脚本1 与 脚本2 的区别就是 第1行多加了一个符号 ':'

但是两者的行为不一样,请大家说说这是为什么呢?

论坛徽章:
0
2 [报告]
发表于 2010-09-05 19:43 |只看该作者
以前讨论过,翻翻以前的帖子

论坛徽章:
0
3 [报告]
发表于 2010-09-05 20:13 |只看该作者
楼上的达人,给个简单提示啊。不给个提示我咋翻帖子呢..
.

论坛徽章:
0
4 [报告]
发表于 2010-09-05 20:20 |只看该作者
本帖最后由 Perl_Er 于 2010-09-05 20:23 编辑

回复 1# shi_wen_qiang


    ${variable:=word}
If variable is not set or is null, set it to word; the value of variable is substituted permanently. Positional parameters may not be assigned in this way.
:表示  not null


       

${parameter-default}和${parameter:-default}几乎是相等的。它们之间的差别是:当一个参数已被声明,但是值是NULL的时候两者不同.

论坛徽章:
0
5 [报告]
发表于 2010-09-06 08:28 |只看该作者
回复 4# Perl_Er


    但是他的冒号是在前面..

论坛徽章:
0
6 [报告]
发表于 2010-09-06 08:34 |只看该作者
本帖最后由 论坛ID 于 2010-09-06 08:55 编辑
  1. : 空命令,等价于"NOP"(no op,一个什么也不干的命令).也可以被认为与shell的内建命令(true)作
  2. 用相同.":"命令是一
  3. 个bash的内建命令,它的返回值为0,就是shell返回的true.
  4. 如:
  5. 1 :
  6. 2 echo $? # 0
  7. 死循环,如:
  8. 1 while :
  9. 2 do
  10. 3 operation-1
  11. 4 operation-2
  12. 5 ...
  13. 6 operation-n
  14. 7 done
  15. 8
  16. 9 # 与下边相同:
  17. 10 # while true
  18. 11 # do
  19. 12 # ...
  20. 13 # done
  21. 在if/then中的占位符,如:
  22. 1 if condition
  23. 2 then : # 什么都不做,引出分支.
  24. 3 else
  25. 4 take-some-action
  26. 5 fi
  27. 在一个2元命令中提供一个占位符,具体见Example 8-2,和"默认参数".如:
  28. 1 : ${username=`whoami`}
  29. 2 # ${username=`whoami`} 如果没有":"的话,将给出一个错误,除非"username"是
  30. 3 # 个命令
  31. 在here document中提供一个占位符,见Example 17-10.
  32. 使用"参数替换"来评估字符串变量(见Example 9-14).如:
  33. 1 : ${HOSTNAME?} ${USER?} ${MAIL?}
  34. 2 # 如果一个或多个必要的环境变量没被设置的话,
  35. 3 #+ 就打印错误信息.
  36. "变量扩展/子串替换"
  37. 在和 > (重定向操作符)结合使用时,把一个文件截断到0长度,没有修改它的权限.
  38. 如果文件在之前并不存在,那么就创建它.如:
  39. 1 : > data.xxx #文件"data.xxx"现在被清空了.
  40. 2
  41. 3 #与 cat /dev/null >data.xxx 的作用相同
  42. 4 #然而,这不会产生一个新的进程,因为":"是一个内建命令.
  43. 具体参见Example 12-14.
  44. 在和>>重定向操作符结合使用时,将不会对想要附加的文件产生任何影响.
  45. 如果文件不存在,将创建.
  46. 注意: 这只适用于正规文件,而不是管道,符号连接,和某些特殊文件.
  47. 也可能用来作为注释行,虽然我们不推荐这么做.使用#来注释的话,将关闭剩余行的
  48. 错误检查,所以可以在注释行中写任何东西.然而,使用:的话将不会这样.如:
  49. 1 : This is a comment thar generates an error,(if [ $x -eq 3] ).
  50. ":"还用来在/etc/passwd和$PATH变量中用来做分隔符.
  51. bash$ echo $PATH
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-09-06 08:46 |只看该作者
  1. [root@gdcxserver ~]# type :
  2. : is a shell builtin
复制代码
由此可见,:是一个内置命令
bash 命令行一般是命令(别名,函数.......)+参数
第一个脚本只有参数,没有命令,不出意外会报错
第二个脚本是命令+参数,可以执行

论坛徽章:
0
8 [报告]
发表于 2010-09-06 08:57 |只看该作者
回复 5# 论坛ID


    Sooorry, 看错了

Command
Function

:
Do-nothing command; returns exit status 0.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP