如何在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
相关产品推荐
相关产品推荐

