質問

I try to write a script. With this script I need to remove return carriage at the end of the output numbers I parsed from some command output. So I need to transform them to integer. But printf won't format the number the way I want:

echo $var
2.80985e+09
var=$(printf "%s" "$var" | tr -dc '[:digit:]' )
echo $var
28098509

As you may see, printf removes the carriage but also modifies the value of variable. But I would like this value remain same, only return carriage is removed. Which parameter I should use with printf?

Thanks

役に立ちましたか?

解決

Maybe you want to do this:

$ printf "%f\n" $var
2809850000.000000

Or this:

$ printf "%f\n" $var | sed -e 's/\..*//'
2809850000

他のヒント

printf did not modify the value of the variable; tr did. You can verify this by:

$ printf "%s\n" "$var"
2.80985e+09
$ printf "%s\n" "$var" | tr -dc '[:digit:]'
28098509

The tr command, as given, removes all non-digit characters.

Your tr command said 'remove every non-digit', so it did that. You should expect programs to do exactly what you tell them to. The whole var=$(...) sequence is bizarre. To remove a carriage return, you could use:

var=$(tr -d '\013' <<< $var)

The <<< redirection sends the string (value of $var) as the standard input of the command.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top