这个unix有什么作用?

时间:2014-01-22 11:16:07

标签: shell unix scripting

你可以帮助我理解这段代码到底做了什么吗? 我想从shell脚本中得到两个参数,这是其中的一部分,但我无法理解//,%%和##的行的含义。在此先感谢您的帮助。

getEnvVal()
{
    tNm=`grep $1 $2`
    tNm=${tNm//$1}
    tNm=${tNm%% }
    tNm=${tNm## }
    echo $tNm
}

1 个答案:

答案 0 :(得分:2)

  • tNm=`grep $1 $2` 保存 grep的输出到变量
  • tNm=${tNm//$1} 从变量中移除 $1的任何内容
  • tNm=${tNm%% } 从变量末尾删除单个空格
  • tNm=${tNm## } 从变量
  • 的开头删除单个空格
  • echo $tNm 打印变量值

我不建议你使用这个脚本,因为它有很多问题:

  • 使用过时的`foo`构造。您应该使用$(foo)
  • grep输出结尾处删除换行符。要获得grep的文字输出,您必须使用以下内容:

    tNm=$(grep "$1" "$2"; printf x)
    tNm=${tNm%x}
    
  • 变量不是quoted properly
  • 如果$1包含任何在Bash中具有特殊含义的字符,${tNm//$1}可能会出现意外行为(感谢@chepner)。
  • 作者可能打算从行的开头和结尾删除多个空格:

    tNm=${tNm%% *}
    tNm=${tNm## *}
    
  • 如果变量以短划线开头,则
  • echo会出现意外行为。请改用printf
  • 变量名称没有意义。