linux - 为什么这个变量的一部分在与字符串组合时会被替换?

标签 linux bash

我有以下循环遍历文件行的 Bash 脚本:

INFO_FILE=playlist-info-test.txt
line_count=$(wc -l $INFO_FILE | awk '{print $1}')

for ((i=1; i<=$line_count; i++))
do
    current_line=$(sed "${i}q;d" $INFO_FILE)

    CURRENT_PLAYLIST_ORIG="$current_line"
    input_file="$CURRENT_PLAYLIST_ORIG.mp3"
    echo $input_file
done

这是 playlist-info-test.txt 文件的示例:

Playlist 1
Playlist2
Playlist 3

脚本的输出应该如下所示:

Playlist 1.mp3
Playlist2.mp3
Playlist 3.mp3

但是,我得到以下输出:

.mp3list 1
.mp3list2
.mp3list 3

我在这上面花了几个小时,不明白为什么“.mp3”部分被移到字符串的前面。我最初认为这是因为输入文件的行中有空格,但删除空格并没有什么不同。我还尝试使用带有 read line 的 while 循环并将输入文件重定向到其中,但这也没有任何区别。

最佳答案

我复制了 playlist-info-test.txt 内容和脚本,并获得了您期望的输出。您的 playlist-info-test.txt 或脚本中很可能存在不可打印的字符,这些字符会扰乱处理过程。使用例如 xxd -g 1 检查两个文件的二进制内容并查找非换行符 (0a) 非打印字符。

关于linux - 为什么这个变量的一部分在与字符串组合时会被替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539513/

相关文章:

linux - 为什么我必须对来自守护进程的命令执行 sudo 命令?

Bash 脚本和 bc

在 OS X 上编译 C 程序以在 Linux 上运行

c - 在 ubuntu 上编译 C 代码时遇到问题。 (#include 错误)

linux - RELP 是否存在于 RSYSLOG 协议(protocol)之外?

linux - 汇编:如何将数字转换为ascii并写入显示缓冲区

c++ - Linux 共享库被加载两次

bash - 在 Docker 容器启动时启动 bash 脚本不起作用

php - 如何记录使用 ssh 完成的事件

linux - 如何从(bash)脚本以跨平台方式获取/设置修改时间?