我有一个文件,其中的值以 ABC 或 ABD 开头。
从输入文件获取值后,如何检查它是以 ABC 还是 ABD 开头?
例如:
value=$(cat file | awk 'NF{print;exit}' | awk '{print $1}')
现在我想检查这个 $value 是否以 ABC 或 ABD 开头。怎么做?
答案1
使用case
要检查 shell 变量是否以 ABC 或 ABD 开头,一种传统(且非常可移植)的方法是使用 case 语句:
case "$value" in
AB[CD]*) echo yes;;
*) echo no;;
esac
因为这不需要外部过程,所以它应该很快。
使用[
或者,也可以使用测试命令:
if [ "${value#AB[CD]}" != "$value" ]
then
echo yes
else
echo no
fi
这也是相当便携的。
使用[[
最后,人们可以使用更现代、更不便携的测试命令:
if [[ $value == AB[CD]* ]]
then
echo yes
else
echo no
fi
一步读取文件并进行测试
读取文件的第一个非空行并测试其第一个字段是否以 ABC 或 ABD 开头:
awk 'NF{if ($1~/^AB[CD]/) print "yes"; else print "no";exit}' file
答案2
尝试这个:
echo $value | grep -c "^AB[CD]"
如果模式在开始时就存在,则将返回 1。