【发布时间】:2019-03-14 00:22:51
【问题描述】:
在 bash 中,我想检查一个变量的名称是否包含特定的字符模式,如“abc”,如果它是真的,它应该回显该变量。最好作为 if 循环。 所以:
abc=1
或
opabc=1
应该回显“1” 但是:
cba=1
什么都不做。
【问题讨论】:
在 bash 中,我想检查一个变量的名称是否包含特定的字符模式,如“abc”,如果它是真的,它应该回显该变量。最好作为 if 循环。 所以:
abc=1
或
opabc=1
应该回显“1” 但是:
cba=1
什么都不做。
【问题讨论】:
请您尝试以下纯 bash 方式。请给脚本适当的权限并运行它,例如:./script.ksh 左右。我还写了else 条件来打印像string NOT found 这样的语句,以防你不想打印任何你可以从中删除else 的部分(尽管当我们没有时这不是好的编程习惯)正确的声明,任何检查点上的打印声明总是有助于任何类型的故障排除恕我直言)。
cat script.ksh
var="abc=1"
val="${var%=*}"
val_field="${var#*=}"
if [[ "$val" =~ "abc" ]]
then
echo "$val_field"
else
echo "String abc NOT found."
fi
或者(根据@Benjamin W. 的评论,现在在这里添加他的好建议作为替代)
cat script.ksh
var="abc=1"
IFS='=' read -r val val_field <<< "$var"
if [[ "$val" =~ "abc" ]]
then
echo "$val_field"
else
echo "String abc NOT found."
fi
【讨论】:
我想你正在扫描某种配置文件。
awk -F= '$1~/abc/ {print $2}' input.cfg
在= 符号处拆分输入。如果字段 1 包含 abc,则打印字段 2。
$ awk -F= '$1~/abc/ {print $2}' <<< 'abc=1'
1
$ awk -F= '$1~/abc/ {print $2}' <<< 'opabc=1'
1
$ awk -F= '$1~/abc/ {print $2}' <<< 'cba=1'
$
【讨论】: