下面的代码运行在远程服务器上:
z=`echo $r| sed 's/\\$//g'`
server=`echo $z | awk '{print tolower($0)".outsourcing.com"}'`在这里,如果我将$r值作为' scale‘传递,我希望我的server变量将标度查找为'- scale’,这意味着如果server变量找到任何后缀或缩尺前缀,它应该会给出输出。假设我将刻度传递给$r,并且它找到了primary-scale.outsourcing.com,它应该给出输出如下:
echo $server primary-scale.outsorcing.com
此外,这一条件应只适用于规模。这意味着如果我在$r变量中传递任何其他字符串,它不应该影响我的上述现有代码。请帮我放这里。
发布于 2016-01-17 17:54:48
# translate to lower-case earlier, not later
r=$(printf '%s\n' "$r" | tr '[:upper:]' '[:lower:]')
# substitute scale with -scale, leave other values alone
[ "$r" = "scale" ] && r="-scale"
# original, unmodified code
z=`echo $r| sed 's/\\$//g'`
server="$z.outsourcing.com"话虽如此,我可能会考虑改变这一点:
#!/bin/bash
# ^^ must be bash shebang; must be bash 4.0 or newer for built-in lowercase PE
r=${r,,} # make value lower-case, for bash 4.0+
# for older shells: use z=$(printf '%s' "$z" | tr '[:upper:]' '[:lower:]') instead of above
[[ $r = scale ]] && r=-scale
z=${r//"$"/}
server="$z.outsourcing.com"由于新代码不包含对外部工具(awk、sed等)的调用,它将运行得更快。
最后--如果您的实际意思是查找以手边的值作为前缀或后缀的文件(最后以outsourcing.com结尾),那么您的server=行是错误的,我将该行翻译成现代语法也是错误的。相反,可以考虑如下:
set -- *"$z"*.outsourcing.com
for server; do
[ -e "$server" ] && echo "$server"
donehttps://stackoverflow.com/questions/34841520
复制相似问题