Intereting Posts
Удалить строку, содержащую определенную строку, и следующую строку Почему мой tar-файл больше, чем резервная копия каталога Сбой диалогового окна печати, любое обходное решение? Исправлено ли исправление shellshock bash базовыми инструментами командной строки, такими как echo и cat? Создание tar-архивов при сжатии? Как проверить, нет ли строки в tcsh Есть ли что-то вроде досуга для использования ЦП? Как создать последовательность «\ e [Z» в терминале? Как показать время от компьютера? Выберете () возврат до следующего jiffy, если вы будете ждать с высоким разрешением timerfd? Каковы некоторые способы сравнить тип файла и кодировки, чтобы разрешить багги grep …? Насколько отличается обработка ввода-вывода на жестком диске в AIX и Redhat Linux? dd для резервного копирования и восстановления полной системы Экран: список Windows в сеансе (неинтерактивный) Можно ли установить среду рабочего стола linux из live cd?

отображение массива в функции – не работает

Что мне здесь не хватает?

Я создал простой массив:

declare -a appArray=( "item1 -a -b" "item2 -c -d" ) 

Если я повторю это, я все вижу

 echo ${appArray[@]} > item1 -a -b item2 -c -d 

Затем я создаю функцию следующим образом:

 fc_DEBUG () { if [ $1 -eq 1 ] ; then echo $2; fi; }; 

Он предназначен для синтаксиса в сценарии bash, и если я установлю переменную DEBUG, он будет повторять текст назад. Поэтому я могу использовать его во всем скрипте без необходимости вручную добавлять / удалять вещи.

Он отлично работает с базовыми данными: например

 fc_DEBUG $DEBUG "This is DEBUG text" 

Если я называю это с помощью массива, я получаю только часть массива.

 fc_DEBUG $DEBUG "${appArray[@]}" > item1 -a -b 

${appArray[@]} расширяется до fc_DEBUG . Таким образом, второй аргумент, который видит функция, является первым из массива. Чтобы быть явным, три аргумента fc_DEBUG видят, являются

 $DEBUG "item1 -a -b" "item2 -c -d" 

(замените $ DEBUG словами, полученными от оператора split + glob, примененного к фактическому значению $ DEBUG (поскольку вы забыли его процитировать)). С технической точки зрения массив передается по значению, а не по ссылке.

 fc_DEBUG () { if [ "$1" -eq 1 ] ; then shift echo "$@" fi } 

Теперь первый аргумент удаляется из списка аргументов со shift , а остальные аргументы печатаются.

Вызовите его с помощью указанного массива:

 fc_DEBUG "$DEBUG" "${appArray[@]}"