Fre*_*coo 5 windows bash cygwin bc
我的角色有问题.我认为这是dos和unix之间的转换问题.
我有一个浮点值的变量.当我使用echo命令打印它时,我得到:
0.495959
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用bc命令对该值进行操作时(我不确定如何编写bc命令).
echo $mean *1000 |bc
Run Code Online (Sandbox Code Playgroud)
我明白了:
(standard_in) 1 : illegal character: ^M
Run Code Online (Sandbox Code Playgroud)
我已经在我的.sh文件中使用了dos2unix命令.我想这是因为我的变量有^ M字符(不用echo命令打印)
我怎样才能消除这个错误?
rua*_*akh 12
我没有Cygwin方便,但在常规Bash中,您可以使用该tr -d命令去除指定的字符,并且您可以使用该$'...'表示法在命令行参数中指定奇怪的字符(它就像一个普通的单引号字符串,除了它支持C/Java/Perl /等类似的转义序列).所以这:
echo "$mean" * 1000 | tr -d $'\r' | bc
Run Code Online (Sandbox Code Playgroud)
将从echo去往的路上剥离回车bc.
你可能真的想要运行这个:
mean=$(echo "$mean" | tr -d $'\r')
Run Code Online (Sandbox Code Playgroud)
它将修改$mean以去除内部的任何回车符,然后您将不必在以后使用它的命令中担心它.
(虽然它也值得看看$mean开始设置的代码.$mean无论如何最终还是有一个回车?也许你可以解决这个问题.)