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

シェルが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 に答える