bash shell 判断变量是否在列表中 您所在的位置:网站首页 字符串在列表中 bash shell 判断变量是否在列表中

bash shell 判断变量是否在列表中

2023-05-03 02:25| 来源: 网络整理| 查看: 265

1. 背景

最近在跟一个AI的项目,代码量很少,于是写了个脚本,想用scp直接复制到生产,但是有一些文件需要排除掉。

 

2. 双中括号关键字

双中括号[[]]是bash shell中的关键词,相对于[]有以下特点和优势:

[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。 使用[[ ... ]]条件判断结构,而不是[... ],能够防止脚本中的许多逻辑错误。比如,&&、||、 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。 bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

实际上,原理就是,在双中括号中,可以使用=~进行shell的正则匹配,找出右边的字符串是否在左边的字符串中。

但是需要注意的是,双中括号在bash中可以使用,在sh中会报找不到的错,这也是我使用的时候遇到的一个坑。

 

3. 例子

譬如,需要判断文件是否不在列表中

#!/bin/bash # 判断文件是否不在列表中 src_dir=/test/dir exclude_files="a.py b.py c.ini" for file in $src_dir/* do sname=$(basename $file) if ! [[ "$exclude_files" =~ "$sname" ]] then echo "file not in $sname" fi done

或者更简化的例子,判断字符串是否包含另外一个字符串:

#!/bin/bash string="abcdefg" if [[ "$string" =~ "abc" ]];then echo "match..." else echo "not match.." fi

结果输出match…

 

4. 参考

(1) BASH 中单括号和双括号

(2) 如何判断一个变量是否包含在数组里面 判断shell数组中是否存在某个值

(完)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有