55 lines
1.8 KiB
Markdown
55 lines
1.8 KiB
Markdown
在 Bash 脚本中,圆括号 `()` 和花括号 `{}` 有不同的用途和行为。
|
||
|
||
1. 圆括号 `()`
|
||
|
||
- 用途:
|
||
- 创建子 shell:在圆括号中的命令序列将在一个子 shell 中执行,子 shell 是一个独立的进程,它会继承父 shell 的环境变量和文件描述符,但是变量的修改在子 shell 中不会影响到父 shell。
|
||
- 数组赋值:在圆括号中可以定义数组,并将值赋给数组。
|
||
- 示例:
|
||
```bash
|
||
(command1; command2; command3)
|
||
```
|
||
- 注意事项:
|
||
- 在圆括号中的命令序列与外部环境是隔离的,所以在子 shell 中定义的变量对于父 shell 是不可见的。
|
||
|
||
2. 花括号 `{}`
|
||
- 用途:
|
||
- 命令扩展和分组:花括号可以用于扩展和分组命令,可以将多个命令组合在一起,作为一个整体进行处理。
|
||
- 文件名扩展:花括号可以用于生成文件名的列表,例如使用通配符进行文件名扩展。
|
||
- 示例:
|
||
```bash
|
||
{ command1; command2; }
|
||
```
|
||
- 注意事项:
|
||
- 花括号中的命令序列会在当前 shell 中执行,不会创建子 shell。
|
||
- 花括号中的命令序列可以使用分号 `;` 或换行符分隔多个命令。
|
||
|
||
总结:
|
||
|
||
- 圆括号 `()` 用于创建子 shell,并在子 shell 中执行命令序列。
|
||
- 花括号 `{}` 用于命令扩展和分组,将多个命令组合在一起进行处理。
|
||
|
||
#### 判断文件
|
||
|
||
test -e "$1" # 与下面等价
|
||
[ -e "$1" ] # 与上面等价
|
||
|
||
更多判断
|
||
-d 是目录
|
||
-f 是文件
|
||
-e 是存在
|
||
-r 是可读
|
||
-w 是可写
|
||
-x 是可执行
|
||
-s 是非空
|
||
-h 是软链接
|
||
-L 是软链接
|
||
-p 是管道
|
||
-S 是 socket
|
||
-b 是块设备
|
||
-c 是字符设备
|
||
-t 是终端
|
||
-g 是设置了组 ID
|
||
-u 是设置了用户 ID
|
||
-k 是设置了粘滞位
|