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)
有用.
那么如何在不创建其他变量的情况下获得相同的结果?
如果你的shell是POSIX(大部分是这些天,除了Solaris的/bin/sh),你可以窝所谓命令替换使用$(),例如.
number=$(expr substr $number 3 $(expr length $number))
Run Code Online (Sandbox Code Playgroud)
使用嵌套反引号进行命令替换需要使用难看的反斜杠转义层.