Bash local 动态作用域:辅助函数为什么能改到调用者的局部变量 局部变量没有离开函数,却被别人改了一个批处理函数把 status 声明为 local,调用辅助函数整理输出后,状态却突然变化。检查全局变量仍然正常,很容易怀疑参数传递或命令输出出了问题。Bash 的局部变量遵循动态作... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 默认值展开:没有设置和空字符串,为什么会走不同分支 空值可能是调用者有意留下的脚本接受一个可选标签:没有传入时使用默认标签,明确传入空字符串时则不显示标签。写成 ${demo_value:-default} 后,主动留空也变回了默认值。问题来自冒号,它改变了检查条件,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash 管道里的计数为什么带不出来:让循环在当前 shell 中读取输入 脚本把几行输出通过管道交给 while 循环,每读一行就增加计数;循环里面看起来正常,循环结束后却仍然打印零。在 Bash 的常见默认设置下,管道中的循环在子 shell 环境执行,修改的是那份环境中的变量,父 sh... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 参数转发:"$@" 保留的边界,为什么 "$*" 会合成一个参数 包装脚本最容易丢掉的是参数边界给常用命令包一层脚本时,常见需求是先做一点准备,再把用户提供的参数交给真正的程序。参数里一旦出现空格、空字符串或星号,肉眼看上去一样的一串文本,传过去却可能已经变成不同数量的参数。问题发... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 没匹配到文件:星号为什么会原样进入循环 空目录里的循环居然执行了一次脚本用星号匹配当前目录的文本文件,目录里明明没有文件,循环却执行了一次,打印出带星号的名字。这是 Bash 默认路径名展开的行为:没有匹配结果时,模式原样保留。程序收到的不是“零个文件”,... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 双中括号的引号:同一个星号,为什么有时匹配整串有时只认自己 过滤名称时,把匹配模式存进变量是常见做法,但给变量补上双引号后,原本能匹配的文件名突然不通过了。这不一定是脚本写错引号,而是双中括号里的比较运算符允许右侧表达式承担不同职责:有时它是模式,有时它是字面文本。先写出问题... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 命令替换会删掉末尾换行:加了双引号为什么仍然少几个字符 脚本把命令输出放进变量,再原样写回文件,结果文件末尾的空行没了。变量两边明明加了双引号,为什么仍会改变内容?原因可能发生在引用之前:常用的美元括号命令替换,会移除输出末尾连续的换行字符,双引号并不能撤销这一步。这种规... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 的 08 为什么不能直接算:先验证十进制,再处理前导零 补零展示和算术语法不是一回事脚本从表单或文件拿到月份、重试次数等文本时,常遇到前面补零的数字。显示为零八不代表 Bash 会按十进制八处理:在算术表达式中,以零开头的整数常量按八进制解释,因此零一零得到八,包含八或九... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Bash 逐行读取文本:保住空格、反斜杠和没有换行的最后一条 看见四条内容,循环却只处理三条读取一份手工编辑的文本清单时,最后一条明明看得见,循环却没有执行它。常见原因是文件末尾没有换行符:read 已经把末尾字符放进变量,但由于遇到文件结束而返回非零。如果循环只依据退出状态决... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash export 环境继承:变量怎样交给子进程,又为什么改不回父进程 终端里看得见,不代表启动的程序也看得见脚本里给一个变量赋值,随后启动另一个程序,对方却说配置缺失。这时首先要检查变量是否导出。普通 shell 变量存在于当前 shell 的执行环境里;启动外部程序时,只有准备传递的... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读