В оболочке sh
, которая не поддерживает массивы и ключевое слово local
, вы по-прежнему можете использовать $@
в качестве массива в функции. Вы можете выбрать два первых аргумента с помощью shift 2
, а затем использовать $@
, которые теперь содержат все остальные аргументы.
foo () {
arg1=$1
arg2=$2
shift 2 # shift $3 into $1, $4 into $2 etc.
for n in "$@"; do # or just: for n do
printf 'Other argument: %s\n' "$n"
# other code acting on "$n"
done
}
foo "arg1" "arg2" "arg3" "arg4"
Заключите тело функции в (... )
вместо {... }
, чтобы сделать все переменные локальными, если функции не нужно изменять глобальные переменные и вы не хотите загрязнять пространство имен переменных ненужными переменными.
Использование ваших исходных данных с foo
, объявленным, как указано выше:
set -- "component1" \
"component21 component22 component23" \
"component3" \
"component41 component42 component43"
foo "$param1" "$param2" "$@"
В оболочке, которая поддерживает массивы и local
, вы должны сделать то же самое (, но функция может захотеть использовать переменные, объявленные как local
), и вызов может быть
foo "arg1" "arg2" "${myarray[@]}"
Чтобы передать несколько массивов в bash
,Я бы использовал ссылку на имя в функции (требуется bash
версия 4.3 или более поздняя):
foo () {
local arg1=$1
local arg2=$2
local -n arr1=$3
local -n arr2=$4
for n in "${arr2[@]}"; do...; done
}
foo "arg1" "arg2" myarray1 myarray2
Обратите внимание, что вы не можете передать в функцию переменную-массив, имя которой совпадает с именем соответствующей переменной-ссылки в функции. (Я считаю это ошибкой, это работает вksh93
).
Части ядра, которые не применимы к вашей аппаратной конфигурации и потребностям программного обеспечения, обычно отключены, т. е. они не потребляют ресурсы ОЗУ или ЦП, за исключением MAC (SeLinux/AppArmor/etc ), который, если он включен, его необходимо отключить вручную, чтобы освободить ресурсы обработки.
Маловероятно, что вы сможете значительно ускорить работу вашего ПК, скомпилировав его в соответствии с вашими потребностями в аппаратной/программной конфигурации. Кроме того, это довольно сложная задача, если вы никогда не делали этого раньше, потому что мы говорим о сотнях терминов, о которых вы, скорее всего, никогда не слышали.
Насколько я слышал, не существует утилит, которые включают параметры ядра, соответствующие вашему оборудованию.
Хорошее руководство по компиляции ядра находится здесь:http://swift.siphos.be/linux_sea/kernelbuilding.html
Если вам интересно, я могу загрузить свою собственную конфигурацию ядра -она максимально упрощена, но применима только к моему оборудованию. Базировать его будет проще, чем прорабатывать его с нуля.
И даже если вам удастся успешно скомпилировать ядро, вам нужно будет создать initrd, потому что большинство дистрибутивов полагаются на него. Конфигурация моего ядра ()не работает, потому что у меня есть статические записи /dev
для его загрузки.