0

我是 bash 脚本的新手,需要一些帮助来解决一个奇怪的问题。

这是我的代码行:

#!/bin/ash -x  
echo  Variabel \$1='\t'$1  
TARGET_DIR=/volume1/video/Transcoded/  
echo "Variabel\$TARGET_DIR=$TARGET_DIR"  
fbname=$(basename "$1")  
echo  Variabel \$fbname=$fbname  
out="${fbname}""${TARGET_DIR}"  
echo  $out  
read -p "Press [Enter] key to start next Transcode..."  

这输出:

Variabel $1=\t/volume1/video/Movies/Thor (2011)/Thor (2011).mkv  
Variabel$TARGET_DIR=/volume1/video/Transcoded/  
Variabel $fbname=Thor (2011).mkv  
/volume1/video/Transcoded/  
Press [Enter] key to start next Transcode... 

在最后一个 echo $out 应该是路径和文件名的组合..但它被打破了。有什么问题?

谢谢你的回答:)

4

2 回答 2

1

尝试这个:

out="${fbname}${TARGET_DIR}"  
echo  $out  
于 2012-04-15T08:55:29.133 回答
1

在我看来,$1 或脚本的某些行以回车符结尾(有时写成 \r)——这个字符通常是不可见的,但会导致奇怪的行为和输出。例如,如果我们以 TARGET_DIR="/volume1/video/Transcoded/" 和 fbname=$'Thor (2011).mkv\r' 开头(注意:$'...' 是带有转义序列的字符串的 bash 表示法像 \r 解释),然后你会以 out=$'Thor (2011).mkv\r/volume1/video/Transcoded/' 结束,当你echo $out,它打印:

Thor (2011).mkv
/volume1/video/Transcoded/

...第二条“线”印在第一条的顶部,所以你永远看不到第一部分。

杂散回车通常是使用 DOS/Windows 文本编辑器的结果——不要将它们用于 unix 文本文件(包括脚本)。要删除它们,请在此处此处查看之前的问题。

顺便说一句,我第二次@shellter 对为什么文件名在路径之前感到困惑......

于 2012-04-15T21:52:21.360 回答