Shell编程:带命令替换的嵌套表达式

Lin*_*nas 2 shell expression nested command-substitution

我无法在其他表达式中处理表达式.例如,这是我的代码:

 #!/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
Run Code Online (Sandbox Code Playgroud)

我想要的只是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
Run Code Online (Sandbox Code Playgroud)

有用.

那么如何在不创建其他变量的情况下获得相同的结果?

Jen*_*ens 6

如果你的shell是POSIX(大部分是这些天,除了Solaris的/bin/sh),你可以窝所谓命令替换使用$(),例如.

number=$(expr substr $number 3 $(expr length $number))
Run Code Online (Sandbox Code Playgroud)

使用嵌套反引号进行命令替换需要使用难看的反斜杠转义层.