我花了一段令人尷尬的漫長時間試圖理解爲什麼下面的「foo」腳本中的第二個條件失敗,但第一個條件成功。簡單的條件在bash中意外失敗,如果語句
請注意:
- 當前目錄包含兩個文件:酒吧和Foo。
- 根據hexdump,所有三個字符串$ s1,$ s2和$ s3是相等的。
在此先感謝您的幫助。
會議:(運行Centos7主機上):
>ls
bar foo
>cat foo
#!/bin/bash
s1="bar foo"
s2="bar foo"
s3=`ls`
echo -n $s1 | hexdump -C
echo -n $s2 | hexdump -C
echo -n $s3 | hexdump -C
if [ "$s1" = "$s2" ]; then # True
echo s1 = s2
fi
if [ "$s1" = "$s3" ]; then # NOT true! Why?
echo s1 = s3
fi
>foo
00000000 62 61 72 20 66 6f 6f |bar foo|
00000007
00000000 62 61 72 20 66 6f 6f |bar foo|
00000007
00000000 62 61 72 20 66 6f 6f |bar foo|
00000007
s1 = s2
>
但是,請注意's3 = \'ls \''不是將文件名列表讀入變量的方式。閱讀[爲什麼你不應該解析ls(1)]的輸出(http://mywiki.wooledge.org/ParsingLs),然後再根據你的實驗開始編寫任何實際的代碼。 – chepner
歡迎來到Stack Overflow。 請注意,在這裏說'謝謝'的首選方式是通過 提高投票的好問題和有用的答案(一旦你有足夠的聲譽這樣做),並接受任何 問題最有用的答案,你問(這也給你一個小小的提升,以你的聲望 )。 請參閱[關於]頁面,以及[如何在此處提問 ?]和 [當有人回答我的 問題時,我該怎麼辦? ?](http://stackoverflow.com/help/someone-answers) –