我有以下循环遍历文件行的 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/