Shell脚本存储candump日志文件名报错‘logfile: command not found’求助
问题解决:Shell变量赋值报错"logfile: command not found"
你的问题出在变量赋值时等号两边加了空格——Shell的变量赋值语法要求变量名=值的格式,等号前后不能有任何空格。你写的logfile = ...会被Shell识别为执行名为logfile的命令,同时把=作为它的第一个参数,这自然会报"command not found"。
正确的写法
去掉等号两边的空格即可,推荐用$()的写法(比反引号更易读,支持嵌套):
logfile=$(ls *.log | grep "candump" | tail -n 1)
如果坚持用反引号,同样要去掉空格:
logfile=`ls *.log | grep "candump" | tail -n 1`
更安全的替代方案
用ls配合管道处理文件名存在潜在风险(比如文件名包含空格或特殊字符时可能出错),推荐用更可靠的写法:
- 用glob匹配+排序:
logfile=$(printf "%s\n" *candump*.log | sort | tail -n 1)
- 用bash数组(bash 4.0及以上版本支持):
# 直接匹配所有含candump的log文件到数组 candump_logs=(*candump*.log) # 取数组最后一个元素(即最新的按名称排序的文件) logfile=${candump_logs[-1]}
这两种写法能避免文件名含特殊字符时的解析问题,比ls管道更稳健。
内容的提问来源于stack exchange,提问作者Verma
相关产品推荐
相关产品推荐

