You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中从文件首行正确设置变量并去除\r字符?

问题原因

你的test.txt文件是Windows格式的换行(每行结尾是\r\n),而Linux系统默认用\n作为换行符。当你用head -1提取首行时,会把行尾的\r(回车符)也一并提取出来,导致变量name的值带上了这个不可见的字符,而正则校验规则^[a-zA-Z0-9_:-]{1,400}$里不允许包含\r,所以触发了错误。

解决方法
  • 直接清理变量里的回车符:在赋值后添加参数扩展去掉\r:

    name=$(cat "$file")
    name=${name%$'\r'}  # 去掉行尾的\r
    echo "name=$name"
    

    或者用tr命令过滤掉回车符:

    name=$(cat "$file" | tr -d '\r')
    
  • 提取行时直接处理回车符:不用生成中间文件test1.txt,一步到位:

    name=$(head -1 /home/test.txt | tr -d '\r')
    

    或者用sed替换掉行尾的\r:

    name=$(sed 's/\r$//' /home/test.txt | head -1)
    
  • 转换文件为Linux格式:如果文件以后还要多次使用,直接用dos2unix转换格式:

    dos2unix /home/test.txt
    

    转换后文件的换行符会变成Linux的\n,后续脚本直接提取就不会带\r了。

内容的提问来源于stack exchange,提问作者Sathya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:16:05