если ошибка оператора bash - PullRequest
       0

если ошибка оператора bash

0 голосов
/ 21 января 2010

Пожалуйста, помогите мне найти проблему

t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f3)
while read x
do
t2=$(echo $x|cut -d" " -f2)
if [ $t2 -ge $t1 ] ; then
  p=$(echo $x|cut -d" " -f1)
  echo -n $p " "
fi
done <f.txt

f.txt
F1 13
G 13
H 0
Я получаю следующую ошибку

-sbash: [: 13: unary operator expected
-sbash: [: 13: unary operator expected


без H 0 строка работает правильно

Ответы [ 3 ]

1 голос
/ 21 января 2010

вы используете bash, так что используйте внутренние компоненты bash. Не нужно вызывать внешнюю обрезку и т. Д. Также используйте кавычки при использовании []

set -- $(sort -k 2,2 f.txt|head -1)
t1=$3
while read f1 f2 f3
do
t2="$f2"
if [ "$t2" -ge "$t1" ] ; then
  p=$f1
  echo -n $p " "
fi
done <f.txt
1 голос
/ 21 января 2010

«ожидается унарный оператор» - это ошибка, когда вы используете бинарный оператор только с одним операндом.

Это означает, что либо t2, либо t1 пусто. Чтобы пустая переменная не исчезла, используйте обозначение по умолчанию ${VARIABLE:-DEFAULT}, чтобы присвоить им значение по умолчанию:

if [ ${t2:-0} -ge ${t1:-0} ]; then
0 голосов
/ 21 января 2010

Я думаю, что вы хотите

t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f2)

вместо

t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f3)

Ваш f.txt имеет только два поля, поэтому команда cut ничего не дает, а затем вы передаете это [ ].

О том, почему он работает без строки H 0, я подозреваю, что ваша строка F равна

F 1 13

вместо

F1 13

(Это всего лишь предположение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...