bash 脚本的输出文件名中的奇怪符号

Strange symbol in output filename from bash script

我有一个 bash 脚本,它采用包含 115 行数据的单个文本文件 'power_coords.txt',并且在每一行中有四个(space 分隔的)包含 x 的列, y,z 坐标(前 3 列)和名称(第 4 列)。示例:

36 54 19 cotc1
45 13 -27 cotc2
1 -6 14 cotc3
....

我的脚本 运行 将以下代码行 运行 对文本文件的每一行进行操作:

#!/bin/bash
input="power_coords.txt"  
while IFS=" " read x y z name
do  
fslmaths avg152T1.nii.gz -mul 0 -add 1 -roi $x 1 $y 1 $z 1 0 1 $name -odt float
done < "$input"

这似乎工作得很好,但是当我 运行 代码时,我在创建的每个文件名中得到一个奇怪的符号:

有谁知道为什么会这样以及如何解决?或者在脚本具有 运行?

之后清理文件名的简单方法(即删除看起来像 lego 的位)

干杯

您的屏幕截图中的小方块显示“000D”,因此它只是一个 CR newline symbol

首先,我建议通过打印来检查变量 $name 中的内容:

while IFS=" " read x y z name
do  
  echo "aaa${name}bbb"
done < "$input"

aaabbb 可以更轻松地查看输出。

这也有助于检查 power_coords.txt 中使用的字符。您可以通过将路径传递给 utility file 来检查它。它应该打印出文件中使用了哪个"line terminator"。

在弄清楚 $name 中读入的内容后,您可以转换 power_coords.txt 中的换行符,或调整 IFS 以允许 CR 也被视为分隔符。