首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用通配符将多个变量合并为一个变量

使用通配符将多个变量合并为一个变量
EN

Stack Overflow用户
提问于 2016-10-30 16:24:07
回答 5查看 538关注 0票数 2

我有这样的剧本:

代码语言:javascript
复制
#!/bin/bash
ping_1=$(ping -c 1 www.test.com  | tail -1| awk '{print $4}' | cut -d '/' -f 2 | sed 's/\.[^.]*$//')
ping_2=$(ping -c 1 www.test1.com | tail -1| awk '{print $4}' | cut -d '/' -f 2 | sed 's/\.[^.]*$//')
ping_3=$(ping -c 1 www.test2.com | tail -1| awk '{print $4}' | cut -d '/' -f 2 | sed 's/\.[^.]*$//')
ping_4=$(ping -c 1 www.test3.com | tail -1| awk '{print $4}' | cut -d '/' -f 2 | sed 's/\.[^.]*$//' )

然后,我想在一个变量中处理ping_1-4的输出。就像这样:

代码语言:javascript
复制
#!/bin/bash

if [ "$ping_*" -gt 50 ]; then
    echo "One ping is to high"
else
    echo "The pings are fine"
fi

bash中是否存在用某种通配符读取这些变量的可能性?

代码语言:javascript
复制
$ping_*

没有为我做任何事。

EN

Stack Overflow用户

发布于 2016-10-30 16:58:27

您所指出的问题的答案是,是的,您可以使用bash (但不是sh)中的参数展开来实现这一点:

代码语言:javascript
复制
#!/bin/bash
ping_1=foo
ping_2=bar
ping_etc=baz
for var in "${!ping_@}"
do
  echo "$var is set to ${!var}"
done

将打印

代码语言:javascript
复制
ping_1 is set to foo
ping_2 is set to bar
ping_etc is set to baz

这是man bash

代码语言:javascript
复制
   ${!prefix*}
   ${!prefix@}
          Names matching prefix.  Expands to the names of variables  whose
          names begin with prefix, separated by the first character of the
          IFS special variable.  When @ is used and the expansion  appears
          within  double  quotes, each variable name expands to a separate
          word.

解决实际问题的方法是使用数组。

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40331108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档