2015-04-15 2 views
-1

Я новичок в bashscripting, и я не могу найти свою ошибку.для многих аргументов во время цикла bash

ERRORCODE:

[: too many arguments 

Сценарий:

i=5 
while [ "${array[i]}" >= "256" ] -a [ "$i" > "0" ]; do 
    array[$i]=0 
    i=$(($i - 1)) 
    array[$i]=$((${array[$i]}+1)) 
done 
+0

'-a' не находится внутри' '' '' 'test'. – user2864740

+1

Используйте '&&' вместо '-a' – cdarke

+0

Когда я меняю' -a' на '&&', то у меня есть новая ошибка: '[: 43: унарный оператор, ожидаемый' –

ответ

2

Я предполагаю, что вы пытаетесь сделать некоторые базы 256 балансовых. Здесь исправлены и упрощенный сценарий, с добавлением, например:

#!/usr/bin/env bash 
i=5 
array=(254 255 255 255 255 256) 
while [ ${array[i]} -ge 256 ] && [ $i -gt 0 ]; do 
    array[i]=0 
    ((i--)) 
    ((array[i]++)) 
done 
echo ${array[@]} 

Выход:

255 0 0 0 0 0 

Честно я предпочел бы использовать арифметическое расширение Bash вместо теста, так что [ ${array[i]} -ge 256 ] && [ $i -gt 0 ] может вместо того, чтобы быть

((array[i] >= 256 && i > 0)) 
+0

работает отлично, спасибо вам большое! –

+0

@DrFaust Добро пожаловать. И добро пожаловать в SO, вы можете принять ответ, если он решил проблему (флажок слева). – 4ae1e1

Смежные вопросы