Bash中用冒号拼接变量异常:调换顺序后变量内容丢失
问题原因
文件首行末尾包含回车符(\r),当输出$first_line:$file时,\r会把光标重置到行开头,后续输出的:./my_dir/file.md会覆盖掉前面的日期内容,导致视觉上日期“丢失”。
解决办法
获取首行内容时去除末尾的回车符即可,以下是几种可行方案:
- 使用
tr命令删除回车符:
for file in ./my_dir/*; do first_line=$(head -n 1 "$file" | tr -d '\r') echo "$first_line:$file" done
- 使用
sed命令移除行尾回车:
for file in ./my_dir/*; do first_line=$(head -n 1 "$file" | sed 's/\r$//') echo "$first_line:$file" done
- 使用bash参数扩展去除末尾控制字符(需bash 4.2及以上版本):
for file in ./my_dir/*; do first_line=$(head -n 1 "$file") first_line=${first_line%$'\r'} echo "$first_line:$file" done
内容的提问来源于stack exchange,提问作者DoneForAiur
相关产品推荐
相关产品推荐

