序言:所以我有一个项目,我需要在一堆文件上运行转换工具。转换有多个步骤,可能需要一段时间。由于这些文件不一定在同一个目录中,因此我创建了一个带有要转换的文件名的文本文件:
<filenames.txt>
/home/me/Documents/file1.txt
/home/me/Documents/file2.txt
/home/me/Documents/file3.txt
问题:然后我有一个 bash 脚本来运行这些文件,并执行转换步骤。但是,我尝试回显相位和文件名,在这种情况下,回显将回显文本粘贴在文件名的中间:
<script.sh>
cat filenames.txt | while read some_file
do
echo
echo "Begin FORMAT_A to FORMAT_B conversion..."
echo "FORMAT_A Filename:"
echo $some_file
formatb_dir= dirname $some_file | tr '\n' "/"
formatb_file= basename $some_file ".xml" | tr '\n' "_"
formatb=$formatb_dir$formatb_file"form_b.xml\n"
echo "FORMAT_B Filename:"
echo $formatb
done
产生如下输出:
Begin FORMAT_A to FORMAT_B conversion...
FORMAT_A Filename:
/home/me/Documents/file1.txt
/home/me/Documents/file1.txt_FORMAT_B Filename:
form_b.xml
Begin FORMAT_A to FORMAT_B conversion...
FORMAT_A Filename:
/home/me/Documents/file2.txt
/home/me/Documents/file2.txt_FORMAT_B Filename:
form_b.xml
Begin FORMAT_A to FORMAT_B conversion...
FORMAT_A Filename:
/home/me/Documents/file3.txt
/home/me/Documents/file3.txt_FORMAT_B Filename:
form_b.xml
“FORMAT_B 文件名”,即回显文本,出现在附加文本“form_b.xml”之前。
我查看了 dirname、basename、echo 和 tr 的手册页,但没有发现任何看起来会导致我所看到的内容的内容。我试着在谷歌上环顾四周,但我不确定我问的是正确的问题(“变量前的 bash 回显文本”?)。
问题:为什么我的回声将回声文本放在我的变量中间?
(可能的相关问题:“我是否正在以完全错误的方式做我正在做的事情?”)
编辑:我接受了 fortea 的回答,因为它让我了解了我对变量的不了解并从命令中获取输出。也就是说,dogbane 和 Jonathan Leffler 展示了更好的方法来做我正在做的事情。