Проблема с длиной массива в сценарии bash

Чтобы получить обычные точечные файлы, убедитесь, что sudo не изменяет переменную среды HOME . Произойдет ли это, зависит от конфигурации времени компиляции и времени выполнения sudo. Чтобы сохранить HOME , отредактируйте файл sudoers (запустите visudo , никогда не редактируйте этот файл напрямую!) И убедитесь, что он содержит

Defaults !always_set_home, !set_home
Defaults env_keep+=HOME

(некоторые из них может быть ненужным в зависимости от параметров компиляции.) И, конечно, не запускайте sudo -i .

Однако избегайте слишком многого в качестве root. Например, вместо запуска редактора от имени пользователя root используйте sudoedit .

4
28.07.2016, 22:53
1 ответ

Вы сводите входные данные к одному значению.

Вы должны сделать

list=("${@}")

, чтобы сохранить массив и потенциал пробелов в аргументах.

Если вы пропустите ", то что-то вроде ./ script.sh" ab "2 3 4 вернет длину 5, потому что первый аргумент будет разделен. С помощью " мы получаем

$ cat x
#!/bin/bash
list=("${@}")

echo array = ${list[*]} and length = ${#list[*]}

$ ./x "a b" 2 3 4  
array = a b 2 3 4 and length = 4
8
27.01.2020, 20:50

Теги

Похожие вопросы