2015-05-10 101 views
-3

我發現很多相同的問題,但沒有解決方案幫助我的。爲什麼我的字符串不相等?

listingInOrder.sh

set user [lindex $argv 0] 
set dir [lindex $argv 1] 
set password [lindex $argv 2] 
set N [lindex $argv 3] 
spawn ssh [email protected]$N.physik.hu-berlin.de ls -1tr $dir | tail -1 
expect "Password:" 
send "$password\r" 
interact 

mainfile.sh

filelocal=`ls -1tr $localdir | tail -1` 
fileremote=`expect listingInOrder.sh $user $remotedir $password $N | tail -1` 
if [[ "$filelocal" != "$fileremote" ]]; then 
    echo "not equal" 
    echo "$filelocal" 
    echo "$fileremote" 
fi 

但輸出是:

not equal 
blatt3A2.m 
blatt3A2.m 

所以名稱是相等的。這裏有什麼問題?

+2

這不是'bash',它看起來像一個'Expect'腳本。 – Barmar

+0

其中一個變量可能有一些額外的空格。試試'echo「| $ filelocal |」'和'echo「| $ fileremote |」',這樣你就可以看到值的結尾。 – Barmar

+0

@Barmar第一個文件是一個Expect腳本,但問題出在bash文件中。 | $ ... |給出這個輸出'不等於 | blatt3A2.m | | blatt3A2.m'我真的不知道,它是什麼意思,不知道如何谷歌這個命令。我如何繼續?對不起,我是新手bash –

回答

0

最後,我已經找到了解決方案。不知何故\ r在字符串的末尾。

$ HEXVAL=$(xxd -pu <<< "$fileremote") 
$ echo "$HEXVAL" 

給我的字符串以下輸出爲十六進制:

626c6174743341322e6d0d0a 

而且0D0A透露自己作爲\ r。

sed $'s/\r//' 

修整了字符串,現在它工作。

0

$fileremote末刪除空格:

fileremote=`expect listingInOrder.sh $user $remotedir $password $N | tail -1` 
fileremote=${fileremote% } 
相關問題