【问题标题】:Strange symbol in output filename from bash scriptbash脚本的输出文件名中的奇怪符号
【发布时间】:2020-07-20 00:47:12
【问题描述】:

我有一个 bash 脚本,它采用包含 115 行数据的单个文本文件“power_coords.txt”,每行中有四列(空格分隔)包含 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"

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

有谁知道为什么会发生这种情况以及如何解决?还是在脚本运行后清理文件名的简单方法(即删除看起来像乐高的部分)?

干杯

【问题讨论】:

    标签: linux bash rename filenames symbols


    【解决方案1】:

    屏幕截图中的小方块显示“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 来检查它。它应该打印出文件中使用了哪个“行终止符”。

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

    【讨论】:

    • 哦,好的 - 有没有办法在创建文件时抑制它被包含在内?
    • @thefloatingkudu 你可以得到readwhile IFS=$' \r' read ... 将CR 修剪为空白
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2021-03-21
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多