Shell 这个unix的功能是什么?
你能帮我理解这段代码到底是做什么的吗? 我猜这需要shell脚本中的两个参数,但我不能完全理解带//、%%和##的行的含义。提前谢谢你的帮助Shell 这个unix的功能是什么?,shell,unix,scripting,Shell,Unix,Scripting,你能帮我理解这段代码到底是做什么的吗? 我猜这需要shell脚本中的两个参数,但我不能完全理解带//、%%和##的行的含义。提前谢谢你的帮助 getEnvVal() { tNm=`grep $1 $2` tNm=${tNm//$1} tNm=${tNm%% } tNm=${tNm## } echo $tNm } tNm=`grep$1$2`将grep的输出保存到变量中 tNm=${tNm//$1}删除变量中出现的$1值 tNm=${tNm%%}从变量末
getEnvVal()
{
tNm=`grep $1 $2`
tNm=${tNm//$1}
tNm=${tNm%% }
tNm=${tNm## }
echo $tNm
}
将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}
- 变量不是
- 如果
包含任何在Bash中具有特殊意义的字符,$1
很可能会出现意外行为(谢谢@chepner)${tNm//$1}
- 作者可能想从行的开始和结束处删除多个空格:
tNm=${tNm%% *} tNm=${tNm## *}
- 如果变量以破折号开头,
将异常运行。改用echo
printf
- 变量名没有意义
$1
没有被引用,因此如果(假设)正则表达式也是一种有效的模式,它将在grep
看到它之前由shell展开,2)$1
随后用作模式来修改tNm
的值。假设$1
是一个固定字符串,则消除了这两个问题。关于echo
的建议通常是正确的,但取决于实际使用的shell(因为echo
是内置的)。例如,对于以连字符开头的参数,bash通常比ksh更健壮。在ksh88中,print--
是更好的选择,因为printf
不是内置的。无论如何,如果使用不当,printf
也会遇到前导连字符问题:tryvar=-n;printf“$var”