Я работаю над тем, чтобы привыкнуть к сценариям оболочки и сталкивался с поведением, которое я нашел интересным и необъяснимым. В следующем коде первый цикл будет выполняться правильно, а второй - нет.Синтаксис Bash for loop
declare letters=(a b c d e f g)
for i in {0..7}; do
echo ${letters[i]}
done
for i in {0..${#letters[*]}}; do
echo ${letters[i]}
done
второй по результатам цикла в следующей ошибки:
syntax error: operand expected (error token is "{0..7}")
Что меня смущает, что это ${#letters[*]}
явно получение оценивается, правильно, на номер 7. Но, несмотря на это код, даже если не удается мы просто видели, что тот же цикл с {0..7}
работает отлично.
В чем причина этого?
Я запускаю OS X 10.12.2, версию GNU bash 3.2.57.
Не уверен насчет объяснения этого Но когда вы используете {0..7} это становится расширена до 1 2 3 4 5 ... и т.д. Но если вы {0 .. $ {# буквы [* ]} это расширяется до строки «{0..7}», которую вы не можете перебирать по – Yarden