【linux】bash脚本中括号问题
在 Bash 脚本里,中括号 [ ] 其实是 test 命令的同义词,[ 是一个命令,] 是该命令的最后一个参数,所以中括号内外的空格会影响命令执行,下面详细说明:
中括号内侧空格
中括号内侧与操作数之间必须有空格,若缺少空格,Bash 会把操作数和中括号视为一个整体,从而导致命令执行出错。
错误示例:
#!/bin/bash
git_app="abc"
if ["$git_app" = "abc"]; thenecho "带参数编译"
elseecho "原生编译"
fi
执行上述脚本会报错,Bash 会把 [“$git_app” 当作一个命令,由于该命令不存在,就会提示找不到命令。
正确示例:
#!/bin/bash
git_app="abc"
if [ "$git_app" = "abc" ]; thenecho "带参数编译"
elseecho "原生编译"
fi
在中括号内侧和操作数之间添加空格后,[、“$git_app”、=、“health”、] 会被正确识别为 test 命令的参数,脚本就能正常执行。
中括号外侧空格
中括号外侧与其他元素(如 if、; 等)之间的空格不是强制要求,但为了代码的可读性,通常会添加空格。
示例:
#!/bin/bash
git_app="abc"
if["$git_app" = "abc"];thenecho "带参数编译"
elseecho "原生编译"
fi
上述代码虽然能正常执行,但可读性较差,添加空格后代码会更易读:
#!/bin/bash
git_app="abc"
if [ "$git_app" = "abc" ]; thenecho "带参数编译"
elseecho "原生编译"
fi
总结
中括号内侧空格是必须的,缺少会导致命令执行出错;中括号外侧空格不影响命令执行,但添加空格能提升代码的可读性。