专业编程基础技术教程

网站首页 > 基础教程 正文

shell里那些让人眼花缭乱的括号(shell小括号和大括号)

ccvgpt 2025-03-26 10:11:51 基础教程 22 ℃


在 Shell 脚本编程中,各种括号有着不同的作用,正确使用它们可以让你的脚本更加简洁、高效和易于理解。以下是一些常见的括号及其功能,帮助你在编写 Shell 脚本时更加得心应手。

shell里那些让人眼花缭乱的括号(shell小括号和大括号)

圆括号(())

o 命令组合:用于将多个命令组合在一起。

例如 (ls -l; echo "done"),会先执行 ls -l 命令列出文件详细信息,然后执行 echo "done" 命令输出“done”,这两个命令作为一个整体执行。

o 子 shell圆括号内的命令会在一个子 shell 中执行。子 shell 会继承父 shell 的环境变量等,但对子 shell 中的变量赋值等操作不会影响父 shell。例如:

var=10

(var=20)

echo $var

输出结果为 10,因为子 shell 中对 var 的修改不影响父 shell 中的 var。

方括号([])

o 条件测试:用于条件表达式的测试。

例如 [ "$str" == "hello" ],用于判断变量 str 是否等于字符串“hello”。方括号内的内容需要遵循一定的语法规则,如字符串比较、数值比较、文件测试等。需要注意的是,方括号两边需要有空格,且方括号内的内容要符合条件表达式的语法

# 示例:文件属性测试
if [ -f "file.txt" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

# 示例:字符串比较
if [ "Superops" = "Superops" ]; then
    echo "字符串相等"
else
    echo "字符串不相等"
fi

# 示例:数值比较
if [ 10 -eq 10 ]; then
    echo "数值相等"
else
    echo "数值不相等"
fi

o 字符类匹配:在模式匹配中,用于匹配方括号内指定的任意一个字符

例如 ls [abc]*,会列出当前目录下以 a、b 或 c 开头的文件。

花括号({})

o 参数扩展:用于变量的参数扩展。

例如 ${var:-default},如果变量 var 为空或未定义,则使用默认值“default”;如果 var 有值,则使用 var 的值。此外,还可以用于变量的其他操作,如截取字符串、替换字符串等。

o 命令组合(另一种形式):与圆括号类似,也可以将多个命令组合在一起,但不会创建子 shell。

例如 { ls -l; echo "done"; },会依次执行 ls -l 和 echo "done" 命令,这两个命令在同一个 shell 中执行。

o 花括号展开:用于生成一系列字符串。

例如 echo file{1,2,3}.txt,会输出 file1.txt file2.txt file3.txt。花括号内的内容可以是逗号分隔的字符串,也可以是范围表达式,如 {a..z} 会生成从 a 到 z 的所有小写字母。

双圆括号((( )))

o 算术扩展:用于进行算术运算。

例如 (( a = 10 + 5 )),会将变量 a 的值设置为 15。双圆括号内的内容支持多种算术运算符,如加减乘除、取模、位运算等,并且可以进行更复杂的算术表达式计算

双方括号([[ ]])

o 条件测试(增强版):与单方括号相比,双方括号提供了更强大的条件测试功能。

例如 [[ "$str" == "hello" ]],在双方括号中,字符串比较使用 == 而不是单方括号中的 =,并且双方括号对空格、特殊字符等的处理更加灵活,可以避免一些常见的错误。此外,双方括号还支持模式匹配、正则表达式匹配等更高级的条件测试功能。

# 示例:模式匹配
if [[ "Superops" == S* ]]; then
    echo "模式匹配成功"
else
    echo "模式匹配失败"
fi

# 示例:逻辑运算符
if [[ -f "file1.txt" && -f "file2.txt" ]]; then
    echo "两个文件都存在"
else
    echo "至少有一个文件不存在"
fi

总结一下

在 Shell 脚本中,各种括号有着不同的作用和用途。正确使用这些括号可以让你的脚本更加简洁、高效和易于理解。

当然了, 如果你希望成为编程老手《Shell 脚本编程最佳实践专栏》也许可以助你快速掌握一线大厂最佳实践的实用技巧。




Tags:

最近发表
标签列表