Посмотрим, как работает $
, #
, а затем ответим на вопрос.
Часть 1
${#pattern}
даст длину строки, которую содержит pattern
.
Поэтому в приведенном выше примере
user@host:~$ echo ${#pattern}
34
, поскольку 34 - длина строки 0110011101001101101000010111001001
.
Часть 2
${pins[$tck]}
используется для получения значения по индексу tck
массива pins
. Если переменная не установлена, то по умолчанию она будет равна 0. Здесь, поскольку tck
не установлено,
${pins[$tck]}
эквивалентно ${pins[0]}
. Таким образом, результат будет:
user@host:~$ echo ${pins[$tck]}
2
Вывод будет равен 2, поскольку индексирование массива начинается с 0 в bash.
Часть 3
$()
используется для подстановки команд в bash. Команда внутри ()
будет выполнена и вывод будет заменен.
Оригинальный вопрос
$((2*${#pattern}))
равно $((2*34))
, что равно 68
Поскольку tck
, tdi
и tdo
не установлены, по умолчанию будет 0.
Таким образом,
${pins[$tck]}
оценивается как ${pins[0]}
, что равно 2
, первому элементу в массиве pins
.
Аналогично, ${pins[$tdi]}
и ${pins[$tdo]}
оба преобразуются в 2
Поэтому последняя строка в вашем скрипте теперь,
checkdatret=$(check_data 0110011101001101101000010111001001 68 2 2 2)
Теперь функция будет вызываться с параметрами
$1=0110011101001101101000010111001001
$2=68
$3=2
$4=2
$5=2
Вам необходимо echo
результат из функции check_data
, который будет заменен на
checkdatret=YOUR_RESULT_FROM_FUNC