zoukankan      html  css  js  c++  java
  • Linux Shell 内建命令:冒号(:)

    https://blog.csdn.net/honghuzhilangzixin/article/details/7073312/

    在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。当然,它也有它的用途的,否则没必要存在。在·Linux的帮助页中说它除了参数扩展和重定向之外不产生任何作用。

    gnu 帮助:http://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins

    冒号(:)的作用

    1)空命令。

    2)参数扩展。

    3)重定向。

    4)当注释使用。

    理解冒号(:)

    1)理解空命令。空命令就是什么也不做,所以返回码永远都是0。虽说是空命令,但仍是命令,就具备一般命令应有的特征,可以象一般命令一样使用。如

    1 [root@localhost test]# :
    2 [root@localhost test]# echo $?
    3 0
    4 [root@localhost test]#

    可以直接在console中执行。返回码为0。

    利用这一特性,:可以当true使用。如用在while等循环体中的条件判断。

    2)理解参数扩展。

    冒号引起的参数扩展,意思是将参数的值替换为新的值。一般有以下几种参数扩展用法:

     1 ${parameter:-word}    如果parameter没有设置或者为空,替换为word;否则替换为parameter的值
     2 ${parameter:+word}    如果parameter没有设置或者为空,不进行任何替换;否则替换为word。
     3 ${parameter:=word}    如果parameter没有设置或者为空,把word赋值给parameter。实际parameterd的值真的被替换了,这就是=号的意思。不能用这种方式指派位置参数或特殊参数的值。
     4 ${parameter:?word}    如果parameter没有设置或者为空,把word输出到stderr,否则替换为parameter的值。
    -、+、? 实际parameter的值并不被修改,扩展只是临时显示成word的值。准确的讲,扩展实际替换的是参数的显示,而不是参数的定义。只有=,才是替换参数的定义。
    5 ${parameter:offset} 扩展为parameter中从offset开始的子字符串。 6 ${parameter:offset:length} 扩展为parameter中从offset开始的长度不超过length的字符。

    原文:https://blog.csdn.net/ieearth/article/details/52589020

    * word前的“-”可以理解为“没定义,则替换成word”;“+”可以理解为“有定义,则替换成word”。

    * word前的“?”可以理解为“参数到底定义了没,没定义,把word当错误消息打印出来。”

    $ foo=hellobash
    $ echo ${foo}
    hellobash
    $ echo ${foo:-newword}
    hellobash
    $ echo ${foo}
    hellobash
    $ echo ${foo:+newword}
    newword
    $ echo ${foo}
    hellobash
    $ echo ${foo:?newword}
    hellobash
    $ echo ${foo}
    hellobash
    $ echo ${foo:=newword}
    hellobash
    $ echo ${foo}
    hellobash
    $ unset foo
    $ echo ${foo}
    
    $ echo ${foo:-newword}
    newword
    $ echo ${foo}
    
    $ echo ${foo:+newword}
    
    $ echo ${foo}
    
    $ echo ${foo:?newword}
    bash: foo: newword
    $ echo ${foo}
    
    $ echo ${foo:=newword}
    newword
    $ echo ${foo}
    newword
    $ echo ${foo:2}
    wword
    $ echo ${foo:2:3}
    wwo
    --------------------- 
    以上例子转自https://blog.csdn.net/ieearth/article/details/52589020 

    三元运算符

    1 $ var=100
    2 $ (($var>100?var++:var--))

    3)重定向

    1 : > test.file
    2 
    3 cat test.file

    cat 文件,什么也没有。

    4)当注释用

    使用冒号还可以用作注释行的开始,但是如果有语法错误,仍将报错,这一点与使用#号不同。如:

     1 [root@localhost test]# cat test.sh
     2 
     3 fun()
     4 {
     5    echo 1222
     6    : cccccc
     7    # llllll
     8    echo 222221
     9 }
    10 
    11 fun
    12 
    13 [root@localhost test]# sh test.sh
    14 1222
    15 222221
    本篇文章出自“国民时代”,转载请注明转载出处。
  • 相关阅读:
    POJ 1754 Splay
    POJ 3481Double Queue Splay
    前缀表达式求值
    Treap(树堆):随机平衡二叉树实现
    Tarjian算法求强联通分量
    (转)priority_queue的用法
    001Angular2环境准备
    9.富客户端应用程序的线程
    8.信号
    7.线程的优先级
  • 原文地址:https://www.cnblogs.com/ChinaGo/p/9910747.html
Copyright © 2011-2022 走看看