你一定很喜欢括号(Bash)
约 691 字大约 2 分钟
2026-03-11
0xFF 绪
Shell 里的括号:<>,(),[],{}。
0x00 尖括号
在Shell里的尖括号<、>意为输入输出重定向。
> 输出重定向会把文件复写,同时不会重定向标准错误流。若要重定向错误流可以使用 2> 或者 &>。
>> 重定向会在文档末尾进行追加内容。
< 输入重定向。<() 为进程替换,可将 () 包裹的命令视作一个文件进行输入重定向。
0x01 圆括号
圆括号一般用于定义数组。
在命令外套一对圆括号,可以将命令放于shell的子进程中运行。
双圆括号为Shell的算术扩展和算术判断。
0x02 花括号
Shell花括号扩展: {num1...num2}。
# 在test目录下创建2026-2032年,每年12个月的文件夹
mkdir -p test/{2026...2032}/{01...12}0x03 方括号
方括号为 Shell 的 BuiltIn 命令,用于test。
| 操作符 | 说明 | 举例 |
|---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
注
其他检查符:
-S: 判断某文件是否 socket。-L: 检测文件是否存在并且是一个符号链接。
双方括号
Bash支持双方括号语法对测试功能进行增强,即可以运用正则来辅助测试。
#!/bin/bash
# 判断一个变量是否为整数
a=-1
if [[ "${a}" =~ ^-?[0-9]+$ ]] then
echo "Yes"
else
echo "No"
fi