网淘吧来吧,欢迎您!

Bash

2026-03-30 新闻来源:网淘吧 围观:13
电脑广告
手机广告

快速参考

主题文件
数组与循环arrays.md
参数展开expansion.md
错误处理模式errors.md
测试与条件判断testing.md

引号陷阱

  • 始终给变量加引号——"$var"而非$var,空格会破坏未加引号的变量
  • "${arr[@]}"保留数组元素——${arr[*]}会将元素合并为单个字符串
  • 单引号是字面量——'$var'不会展开变量
  • 命令替换要加引号——"$(command)"$(command)

单词拆分与通配符扩展

  • 未引用的$var会在空白字符处拆分——file="my file.txt"; cat $file会失败
  • 未引用的*会扩展为文件——如果是字面意思请加引号或转义:"*"\*
  • set -f可禁用通配符扩展——或者正确地为所有内容加上引号

测试括号

  • [[ ]]优于[ ]——无单词拆分,支持&&||和正则表达式
  • [[ $var == pattern* ]]—右侧使用不带引号的通配符模式
  • [[ $var =~ regex ]]—正则表达式匹配,不要给正则表达式加引号
  • -z为空,-n非空—[[ -z "$var" ]]测试是否为空

子shell陷阱

  • 管道会创建子shell—cat file | while read; do ((count++)); done—count值丢失
  • 使用while read < file或进程替换—while read; do ...; done < <(command)
  • ( )是子shell,{ }是同一shell—在( )中的变量不会保留

退出处理

  • set -e出错时退出——但在if||&&条件中不生效
  • set -u未定义变量时报错——可捕获拼写错误
  • set -o pipefail——管道中任意命令失败则整体失败,而非仅最后一条
  • trap cleanup EXIT——在任何退出时(包括错误)都会运行

数组

  • 声明:arr=(一 二 三)——或arr=()然后arr+=(项目)
  • 长度:${#arr[@]}——而不是${#arr}
  • 所有元素:"${arr[@]}"—务必使用引号
  • 索引:${!arr[@]}—对稀疏数组有用

参数扩展

  • 默认值:${var:-default}—若变量未设置或为空则使用默认值
  • 分配默认值:${var:=default}—同时赋值给变量
  • 未设置时报错:${var:?error message}—显示错误信息并退出
  • 子字符串:${var:0:5}—前5个字符
  • 移除前缀:${var#pattern}##表示贪婪匹配

算术运算

  • $(( ))用于数学运算—result=$((a + b))
  • (( ))用于条件判断—if (( count > 5 )); then
  • 不需要$在内部使用$(( ))$((count + 1))而不是$(($count + 1))

常见错误

  • [ $var = "value" ]如果 var 为空会失败—请使用[ "$var" = "value" ][[ ]]
  • if [ -f $file ]文件名含空格时—务必加上引号:if [[ -f "$file" ]]
  • local在函数中—不使用它,变量将是全局的
  • read没有-r—反斜杠被解释为转义符
  • 回显可移植性—使用打印函数以获得可靠的格式化效果

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部
上一篇:Lobster 下一篇:Slk

相关文章

您是本站第324614名访客 今日有192篇新文章/评论