zoukankan      html  css  js  c++  java
  • shell参数扩展

    参数扩展的表示形式为:${expression}。expression包括各种字符直到匹配上'}'。当出现以下情况时候'}'不会被检查来匹配:

    1)在转义字符之后,如{;

    2)在引号里面,如‘}’;

    3) 在算术表达式,命令替换或者变量扩展里面的,如${value}

    最简单的参数扩展形式如:${parameter}

    使用如下模式可以修改参数扩展:

    ${parameter:-[word]}
    Use Default Values. If parameter is unset or null, the expansion ofword (or an empty string if word is omitted) shall be substituted; otherwise, the value ofparameter shall be substituted.
    当${parameter}值为空或者没有设定的时候,用[word]值来替换,否则它就是该表达式的值。
    [hdfs@cdh51kdc ~]$ bb=3
    [hdfs@cdh51kdc ~]$ echo ${aa}
    
    [hdfs@cdh51kdc ~]$ echo ${bb}
    3
    [hdfs@cdh51kdc ~]$ echo ${aa-${bb}}
    3
    [hdfs@cdh51kdc ~]$ aa=2
    [hdfs@cdh51kdc ~]$ echo ${aa-${bb}}
    2
    ${parameter:=[word]}
    Assign Default Values. If parameter is unset or null, the expansion ofword (or an empty string if word is omitted) shall be assigned toparameter. In all cases, the final value of parameter shall be substituted. Only variables, not positional parameters or special parameters, can be assigned in this way.
    当${parameter}值为空或者没有设定的时候,用[word]值来给${parameter}赋值并替换最后的表达式,否则它就是该表达式的值。
    [hdfs@cdh51kdc ~]$ echo ${aa-${bb}}
    2
    [hdfs@cdh51kdc ~]$ echo ${aa:=${bb}}
    2
    [hdfs@cdh51kdc ~]$ echo ${cc}
    
    [hdfs@cdh51kdc ~]$ echo ${cc:=${bb}}
    3
    [hdfs@cdh51kdc ~]$ echo ${cc}
    3
    ${parameter:?[word]}
    Indicate Error if Null or Unset. If parameter is unset or null, the expansion ofword (or a message indicating it is unset if word is omitted) shall be written to standard error and the shell exits with a non-zero exit status. Otherwise, the value ofparameter shall be substituted. An interactive shell need not exit.
    当${parameter}值为空或者没有设定的时候,用[word]值作为标准错误输出提示并退出shell且返回非0状态。否则它就是该表达式的值。
    [hdfs@cdh51kdc ~]$ echo ${cc:?"Value not set"}
    3
    [hdfs@cdh51kdc ~]$ echo ${dd:?"Value not set"}
    -bash: dd: Value not set
    ${parameter:+[word]}
     
     
    Use Alternative Value. If parameter is unset or null, null shall be substituted; otherwise, the expansion ofword (or an empty string if word is omitted) shall be substituted.
    当${parameter}值为空或者没有设定的时候,表达式返回null。否则用[word]替换表达式的值。
    [hdfs@cdh51kdc ~]$ echo ${cc:+"Value not set"}
    Value not set
    [hdfs@cdh51kdc ~]$ echo ${dd:+"Value not set"}
    ${#parameter}

    String Length. The length in characters of the value of parameter shall be substituted. If parameter is '*' or '@', the result of the expansion is unspecified. If parameter is unset andset -u is in effect, the expansion shall fail.
    表达式返回${parameter}值中字符的个数。
    [hdfs@cdh51kdc ~]$ echo ${#cc}
    1
    [hdfs@cdh51kdc ~]$ echo ${#dd}
    0

    The following four varieties of parameter expansion provide for substring processing. In each case, pattern matching notation (see Pattern Matching Notation), rather than regular expression notation, shall be used to evaluate the patterns. Ifparameter is '#', '*', or '@', the result of the expansion is unspecified. Ifparameter is unset and set -u is in effect, the expansion shall fail. Enclosing the full parameter expansion string in double-quotes shall not cause the following four varieties of pattern characters to be quoted, whereas quoting characters within the braces shall have this effect. In each variety, ifword is omitted, the empty pattern shall be used.

    ${parameter%[word]}
    Remove Smallest Suffix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result inparameter, with the smallest portion of the suffix matched by the pattern deleted. If present,word shall not begin with an unquoted'%'.
    用[word]产生的模式来匹配${parameter}的后缀并去除掉最小匹配部分
    [hdfs@cdh51kdc ~]$ echo ${cc}
    Value not set
    [hdfs@cdh51kdc ~]$ echo ${cc%"et"}
    Value not s
    ${parameter%%[word]}
    Remove Largest Suffix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result inparameter, with the largest portion of the suffix matched by the pattern deleted.
    用[word]产生的模式来匹配${parameter}的后缀并去除掉最大匹配部分
    [hdfs@cdh51kdc ~]$ echo ${cc%%t*}
    Value no
    [hdfs@cdh51kdc ~]$ echo ${cc%t*}
    Value not se
    ${parameter#[word]}
    Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result inparameter, with the smallest portion of the prefix matched by the pattern deleted. If present,word shall not begin with an unquoted '#'.
    ${parameter##[word]}
    Remove Largest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result inparameter, with the largest portion of the prefix matched by the pattern deleted.
    最后两个分别是去除掉前缀的[word]最小匹配和最大匹配
    [hdfs@cdh51kdc ~]$ echo ${cc#*t}
    set
    [hdfs@cdh51kdc ~]$ echo ${cc##*t}
    
    [hdfs@cdh51kdc ~]$ echo ${cc#V}
    alue not set
  • 相关阅读:
    IDEA 启动项目报错 Error:java: java.lang.OutOfMemoryError: GC overhead limit exceeded
    JetBrains 里不为人知的秘密(8) -- 插件篇
    ant-design-vue 之upload 文件上传
    PHP获取IPv4地址
    监控制定程序的CPU和内存开销
    Python字符串转bool函数
    JetsonNano国内环境配置
    局域网主机定时ping实现监控
    无root权限crontab间接实现守护进程
    2020/3/31
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5570932.html
Copyright © 2011-2022 走看看