В tcsh Вы использовали бы массивы следующим образом.
Определите массив
set myarray = ( element1 element2 element3 element4 etc )
Произведите целый массив
printf '%s\n' "$array[-]"
Элемент печати 1 - 3
printf '%s\n' "$array[1-3]"
Примечание: В Bash первый элемент массива запускается в 0
(нуль).
Также добавьте set verbose
сверху Вашего сценария для наблюдения, какие строки интерпретируются и где он перестал работать.
Должно быть, у вас очень старая версия tcsh, которая Слишком длинное слово было снято в tcsh версии 6.14.03 в 2006 году.
echo "$array"
Конкатенация элементов массива будет передана в echo
как один элемент, но произойдет сбой, если любой из них содержит символ новой строки.
echo "$array:q"
Правильнее было бы пройти конкатенацию всех элементов.
Передать все элементы массива (, кроме пустых; хотя это будет исправлено в следующем выпуске)как отдельные аргументы для echo
, это будет:
echo $array:q
Но если echo "$array"
не работает для вас с Word слишком длинным , echo
в этой очень старой версии также может завершиться ошибкой с echo :Слишком много аргументов. .
Word too long
ошибка? – Keith Thompson 08.11.2013, 01:04echo "$array"
должен работать отлично для печати целого массива - за исключением "Word слишком долго" проблема, к которыйprintf '%s\n' "$array[-]"
одинаково уязвимо. – Keith Thompson 08.11.2013, 01:10set array
только, который закончится ни к чему выводу (пустого). Он, вероятно, переопределяет массив так или иначе и приводит к ошибке.set array; echo $array
ничего не должен возвращать, уже не говоря о "Word слишком долго" – Valentin Bajrami 08.11.2013, 01:16set array
было сокращение фактической команды, которую он использовал. Если он получал "слово слишком долго", он, очевидно, устанавливает его на что-то. Ваш недавний комментарий к вопросу является хорошим. – Keith Thompson 08.11.2013, 01:25