Проблемы с плавающей арифметикой в ударе

У меня есть код в ударе:

a=$(cat "tempf.out")

Где tempf.out - что-то как это:

-432.4319347412

Я хочу к multyiply это 2, таким образом, я пишу:

result=$(expr $a*2)

Но я получаю это:

*232.4319347412

Если я пытаюсь использовать до н.э:

result=$(expr $a*2|bc)

Я добираюсь:

(standard_in) 1: illegal character: ^M

Помогите зафиксировать его.

2
задан 1 July 2016 в 20:36

2 ответа

Если Ваш tempf.out файл будет иметь окончания строки стиля DOS (CR-LF) затем, то необходимо будет зафиксировать это - или на уровне файла с помощью dos2unix, tr, или sed, например, например,

a=$(sed 's/\r$//' tempf.out)
bc <<< "$a*2"

или путем удаления его из $a переменная с помощью возможностей замены параметра оболочки, например,

a=$(<tempf.out)
bc <<< "${a%^M}*2"

, где эти ^M составленное использование фактического возврата каретки Ctrl + V Ctrl + M

2
ответ дан 2 December 2019 в 04:55

Большое спасибо за всех

a=$(sed 's/\r$//' tempf.out)
result=$(expr $a*2 | bc)    
echo $result

работы для меня

-1
ответ дан 2 December 2019 в 04:55

Другие вопросы по тегам:

Похожие вопросы: