我想在shell中完成如下的動作:VAR1=abcd VAR2=ef,那麼按照c語言 VAR2大於VAR1了,
可是我看到shell中好象只能檢測這兩個字符串是否匹配 而不能比較大小啊
好像是不能比較大小。如果用變通的方式呢,似乎可考慮用sort等命令來組合。麻煩點兒。
if [ $VAR1 = `echo "$VAR1 $VAR2"sorthead -1` ]
then
echo "VAR1 is little than VAR2"
else
echo "VAR1 is greater that VAR2"
fi
不錯不錯,今天加班也算有收獲了
前面加一個相等時的判斷,這個字符串比較函數就完整了,呵呵
實際上是利用了sort的排序功能,高
發現新問題:sort 排序時並不時按ascii值時行排序的,將sort的所有選項都試過了,也沒能得到按ascii進行排序的結果。
迷惑!!!!
誰給解釋並解決一下?
先謝了!
sort可以照字典序排列,通常和ascii值是一致的啊.
舉個例子,大家來看一下.
to valentine:
例如以下兩個文件a.txt和b.txt,其中括號內為行首字符的16進制ascii碼,b.txt由a.txt排序所得,即sort a.txt >b.txt。可以看出,b.txt的內容並不是按ascii碼內容從小到大排列的。
a.txt的內容:
(20 空格)
(09 tab)
_(5f)
-(2d)
1(31)
a(61)
A(41)
b.txt的內容:
(09 tab)
(20 空格)
A(41)
a(61)
1(31)
-(2d)
_(5f)
備注:測試環境為sco504。
又:informix排序時是按ascii值大小進行的,而c語言之strcmp好像也是按ascii值的大小進行比較。
對於字母,數字,空格和tab,如果設置正確的LC_CTYPE,sort的結果和ASCII序是一致的.
sco下試一下en_US.ascii.
如您所言,LC_CTYPE=en_US.ascii;eXPort LC_CTYPE;sort a.txt >b.txt,b.txt果然按ascii值進行排序。
在solaris8 sparc 上實驗通過 謝謝大家和斑竹
其他問題俺不懂,但
俺看第一個問題其實比較簡單
expr $var1 > $var2 > /dev/null
是啊,俺也學到東西了
不過就樓主文題而言, expr $VAR1 < $VAR2 不就解決乎?
說錯了大家打俺
沒錯啊,是用expr比較簡單