2012-10-28 61 views
2

我在處理其他表達式中的表達式時遇到問題。例如,這裏是我的代碼:Shell編程:帶命令替換的嵌套表達式

#!/bin/sh 
number=0 
read number 
if [ `expr substr $number 1 2` = "0x" ]; 
then 
echo "Yes that's hex: $number" 
number=`expr substr $number 3 `expr length $number`` 
echo $number 
else 
echo "No that's not hex" 
fi 

所有我想要的是回聲打印數量,而不加「0x」。比方說,如果輸入是0x15,輸出應該只是15.但似乎找到字符串的長度失敗。

現在,如果我創建了一個名爲長這樣的另一個變量:

#!/bin/sh 
number=0 
read number 
if [ `expr substr $number 1 2` = "0x" ]; 
then 
echo "Yes that's hex: $number" 
length=`expr length $number` 
number=`expr substr $number 3 $length` 
echo $number 
else 
echo "No that's not hex" 
fi 

它的工作原理。

那麼如何在不創建其他變量的情況下獲得相同的結果呢?

回答

6

如果你的shell是POSIX的長度(大多數是這些天,除了Solaris的/bin/sh),你可以窩所謂命令替換$(),例如。

number=$(expr substr $number 3 $(expr length $number)) 

帶嵌套反引號的命令替換需要醜陋的反斜槓轉義層。

1

您可以使用

number=`expr substr $number 3 ${#number}` 

${#number} 

可用於檢索字符串