bash中的括号

本文介绍了Bash shell中的多种用法。如list在子shell或当前shell中的执行情况及返回值,算术计算命令,还有多种参数扩展形式,像二重参数、子串提取、字符串替换等,以及返回文件内容和数学表达式值的命令。

(list)
    list将在一个子shell中被执行, 不会对当前shell产生影响
    返回list的exit值

{ list; }
    可以作组合命令用
    list将在当前shell中被执行
    list结尾处必须要有新行或';'号
    返回list的exit值
    list前后必须有空格

((expression))
    算术计算

${!p} 二重参数
${!p*} 返回所有以p开头的变量
${p:-word} 如果变量p不存在,返回"word"
${p:=word} 如果变量p不存在,返回"word",并将p的值设为"word"
${p:?word} 如果变量p不存在,将"word"打入STDERR
${p:+word} 如果变量p存在,返回"word"
${p:2}  子串
${p:2:3} 子串
${p#pattern} 返回p开头删除pattern后的字符串,非贪婪模式
${p##pattern} 返回p开头删除pattern后的字符串,贪婪模式
${p%pattern} 返回p结尾删除pattern后的字符串,非贪婪模式
${p%%pattern} 返回p结尾删除pattern后的字符串,贪婪模式
${p/pattern/word} 用"word"替换pattern,pattern前可加#或%,表开头或结尾
${p//pattern/word} 用"word"替换所有pattern,pattern前可加#或%,表开头或结尾

${<file} 返回文件内容 

$((expression)) 返回数学表达式的值
${ list; } 返回命令执行之输出

### 使用双中括号实现或关系逻辑判断字符串是否以其他字符串结尾 在 Bash 脚本中,`[[ ... ]]` 提供了强大的条件测试功能,支持正则表达式匹配和逻辑运算。以下是关于如何使用双中括号实现或关系逻辑,并判断字符串是否以多个指定字符串结尾的详细说明。 #### 使用 `||` 实现或关系逻辑 可以通过在双中括号内嵌套多个条件,并用 `||` 连接来实现或关系逻辑。以下是一个示例代码: ```bash #!/bin/bash str="example.txt" if [[ "$str" == *.txt || "$str" == *.log ]]; then echo "String ends with .txt or .log." else echo "String does not end with .txt or .log." fi ``` 上述代码中,`||` 用于连接两个条件,分别检查字符串是否以 `.txt` 或 `.log` 结尾[^1]。 #### 使用正则表达式实现或关系逻辑 `[[ ... ]]` 支持正则表达式匹配,可以更简洁地实现或关系逻辑。以下是一个示例代码: ```bash #!/bin/bash str="example.txt" if [[ "$str" =~ \.txt$|\.log$ ]]; then echo "String ends with .txt or .log." else echo "String does not end with .txt or .log." fi ``` 在此代码中,`=~` 操作符用于匹配正则表达式,`\.` 表示匹配实际的点字符,`|` 表示或关系,`$` 表示匹配字符串末尾[^1]。 #### 动态生成后缀列表并进行匹配 如果需要动态生成后缀列表并进行匹配,可以结合数组和循环实现。以下是一个示例代码: ```bash #!/bin/bash str="example.txt" suffixes=(".txt" ".log" ".csv") for suffix in "${suffixes[@]}"; do if [[ "$str" == *"$suffix" ]]; then echo "String ends with one of the specified suffixes." exit 0 fi done echo "String does not end with any of the specified suffixes." ``` 此代码通过遍历数组中的每个后缀,并使用通配符 `*` 检查字符串是否以该后缀结尾[^2]。 #### 注意事项 - 在使用 `[[ ... ]]` 时,建议始终将变量用双引号括起来,以避免空值或特殊字符引发的问题[^3]。 - 正则表达式中的特殊字符(如 `.`)需要使用反斜杠 `\` 进行转义,以确保正确匹配[^1]。 ### 示例代码总结 以下是一个综合示例,展示如何使用双中括号和或关系逻辑判断字符串是否以多个指定字符串结尾: ```bash #!/bin/bash str="example.txt" # 使用 || 实现或关系逻辑 if [[ "$str" == *.txt || "$str" == *.log ]]; then echo "Using ||: String ends with .txt or .log." fi # 使用正则表达式实现或关系逻辑 if [[ "$str" =~ \.txt$|\.log$ ]]; then echo "Using regex: String ends with .txt or .log." fi ``` #### 输出结果 对于输入字符串 `example.txt`,上述代码将输出: ``` Using ||: String ends with .txt or .log. Using regex: String ends with .txt or .log. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值