插件窝 干货文章 第一节:Bash编程易犯的错误

第一节:Bash编程易犯的错误

错误 Bash 做法 正确 394    来源:    2025-05-19

Bash编程易犯的错误

作为IT工程师,在编写Bash脚本时经常会遇到一些常见陷阱。以下是Bash编程中最容易犯的错误:

1. 变量引用错误

# 错误示范
var=hello
echo $var_world  # 试图输出"hello world",但实际会输出空值

# 正确做法
echo ${var}_world

2. 空格处理不当

# 错误示范
if [ $var = "hello" ]; then  # 当$var为空时会导致语法错误
    echo "empty"
fi

# 正确做法
if [ "$var" = "hello" ]; then
    echo "not empty"
fi

3. 未处理命令返回值

# 错误示范
cd /some/directory
rm file.txt  # 如果cd失败,可能会删除错误位置的文件

# 正确做法
cd /some/directory || exit 1
rm file.txt

4. 文件名包含空格或特殊字符

# 错误示范
for file in $(ls); do
    rm "$file"  # 如果文件名包含空格会出错
done

# 正确做法
for file in *; do
    rm "$file"
done

5. 管道中的变量作用域

# 错误示范
count=0
cat file.txt | while read line; do
    ((count++))
done
echo $count  # 输出0,因为管道创建了子shell

# 正确做法
count=0
while read line; do
    ((count++))
done < file.txt
echo $count

6. 未加引号的变量扩展

# 错误示范
filename="my file.txt"
rm $filename  # 会尝试删除"my"和"file.txt"两个文件

# 正确做法
rm "$filename"

7. 使用反引号而非$()

# 过时做法
output=`command`

# 现代做法
output=$(command)  # 更易读且支持嵌套

8. 忽略set -euo pipefail

# 不安全的脚本
#!/bin/bash
command1
command2

# 更安全的脚本
#!/bin/bash
set -euo pipefail
command1
command2

9. 不正确的整数比较

# 错误示范
if [ $count > 10 ]; then  # 这是字符串比较,且会创建文件
    echo "big"
fi

# 正确做法
if [ $count -gt 10 ]; then
    echo "big"
fi

10. 忘记shebang行

# 缺少shebang可能导致脚本在不同shell中行为不一致
#!/bin/bash
# 脚本内容...

避免这些常见错误可以显著提高Bash脚本的可靠性和可维护性。