Плавающая точка в CSH?

Я пытался запустить этот скрипт, но он дает ошибку, "плохо сформировал число" из-за десятичных 0.2224. Если я заменяю его каким-либо целым числом, сценарий хорошо работает.

#!/bin/csh -f

set shift="-1 2  "

foreach d ($shift)
@ z = $d * "0.2224"

 awk -v k=$d 'FNR==3{$1+=4*k;}1' Lat | cat >>head
 awk -v k=$d '{$2+=k;}1' f1 | cat >>g1
 awk -v k=$d '{$2+=3*k;}1' f2 | cat >>g2
cat head g1 g2 > POSCAR-$z
rm head
rm g1
rm g2
1
задан 1 June 2016 в 18:53

2 ответа

Переменные Shell являются строками, не числами. Когда Вы вводите 2 или "0.2224", это рассматривается как строка. Оболочка может обработать некоторое простое преобразование данных, таким образом, десятичные выражения могут работать; но значения с плавающей точкой не будут работать.

Чтобы сделать математику в оболочке, можно передать значения по каналу через bc и объединение, что с заменой команды (обертки обратной галочки вокруг команды):

set d = 2
set result = `echo "$d * 0.2224" | bc`
echo $result

Синтаксис этого примера записан для csh/tcsh, но принцип работает в bash также. При необходимости в чем-то более сложном, чем это можно хотеть реализовать сценарий в python вместо этого.

2
ответ дан 7 December 2019 в 13:44

Оператор "сдвиг набора = "-1 2" "вызывает эту ошибку, "плохо сформировал число". В csh сценариях должно быть пространство между операционными символами и переменными или числом. Таким образом, это должно быть" установлено сдвиг = "-1 2".

0
ответ дан 7 December 2019 в 13:44

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

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