我有以下代码在远程服务器上运行:
z=`echo $r| sed 's/\\$//g'`
server=`echo $z | awk '{print tolower($0)".outsourcing.com"}'`
如果我将$ r值作为'SCALE'传递,我希望我的server
变量找到比例为'-scale'表示如果server
变量找到任何后缀或前缀,它应该给出输出。假设我将SCALE传递给$ r并找到primary-scale.outsourcing.com
,它应该将输出提供为:
echo $server
primary-scale.outsorcing.com
此条件也适用于SCALE。意味着如果我在$ r变量中传递任何其他字符串,它不应该影响我上面的现有代码。请帮我把它放在这里。
答案 0 :(得分:1)
# 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"
done