Bash脚本变量初始化失败求助:用sed输出赋值字符串变量
问题分析与修复方案
你的脚本里变量j初始化失败主要有几个关键问题,我帮你梳理并修正:
核心错误点
- 变量赋值的空格问题:bash中变量赋值时,等号两边不能有空格,
j = "$(...)"这种写法会被解析成命令j加上参数,必然报错 - 老旧的算术表达式语法:
$[i-1]是bash的旧语法,虽然部分环境支持,但标准写法是$((i-1)),兼容性更强 - 带空格文件名的引号缺失:当
j包含空格时,后续写入文件如果不加双引号,会被拆分成多个文件名,导致错误
修正后的脚本
#!/bin/bash # 提前确保目标目录存在,避免写入失败 mkdir -p ./cards for i in $(cat rows.txt); do # 修复赋值空格问题,改用标准算术表达式 j="$(sed -ne "$((i-1))p" LOB_final.html)" echo "$j" # 给输出文件名加上双引号,处理带空格的情况 sed -ne "$((i-1)),$((i+4))p" LOB_final.html >> "./cards/$j.txt" done
关键修改说明
- 移除了无用的
i=1初始化:循环里的i会被$(cat rows.txt)的内容覆盖,这个初始值没有实际作用 - 变量赋值改为
j="$(sed ...)":去掉等号两边的空格,符合bash变量赋值的语法要求 - 算术表达式替换为
$((i-1))和$((i+4)):采用bash标准的算术扩展语法,兼容性更好 - 输出路径添加双引号:
"./cards/$j.txt"确保带空格的文件名被正确识别,不会被拆分 - 新增
mkdir -p ./cards:提前创建目标目录,避免因目录不存在导致的写入失败
内容的提问来源于stack exchange,提问作者msquaza
相关产品推荐
相关产品推荐

