3

我在处理其他表达式中的表达式时遇到了麻烦。例如,这是我的代码:

 #!/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

我想要的只是让 echo 打印没有'0x'的数字。假设输入为 0x15,则输出应仅为 15。但似乎查找字符串的长度失败了。

现在,如果我像这样创建另一个名为 length 的变量:

 #!/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

有用。

那么如何在不创建另一个变量的情况下获得相同的结果呢?

4

2 回答 2

7

如果你的 shell 是 POSIX (现在大多数是,除了 Solaris' /bin/sh),你可以嵌套所谓的命令替换$()例如。

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

带有嵌套反引号的命令替换需要丑陋的反斜杠转义层。

于 2012-10-28T16:44:03.720 回答
1

您可以使用

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

${#number}

可用于检索字符串的长度

于 2012-10-28T16:29:26.900 回答