Я нашел странную вещь и буду хорош, если кто-то может помочь зафиксировать ее.
#!/bin/bash
#
dockerdir="docker"
step_1=("nginx" "create" "default.conf")
step_2=("nginx" "use" "default.conf" "replace" "server tplphp:9000" "server bbaphp1:9000;")
#step_3=("nginx" "use" "default.conf" "add" " server bbaphp1:9000" " server bbaphp2:9000")
#step_4=("nginx" "use" "default.conf" "add" "server bbaphp2:9000" "server bbaphp3:9000")
#step_5=("nginx" "use" "default.conf" "delete" " server bbaphp3:9000")
#step_6=("php" "value0")
#step_7=("php" "value1")
declare -a buildfolders=(
step_1[@]
step_2[@]
)
#
echo "Start:"
arrayleght=${#buildfolders[@]}
for (( i=1; i<${arrayleght}+1; i++ ));
do
folder=${!buildfolders[$i-1]:0:1}
file_task=${!buildfolders[$i-1]:1:1}
file=${!buildfolders[$i-1]:2:1}
task=${!buildfolders[$i-1]:3:1}
variable_name=${!buildfolders[$i-1]:4:1}
variable_value=${!buildfolders[$i-1]:5:1}
echo "Folder ${folder} "
#" leght "${#folder}
echo "Task ${file_task}"
# " leght "${#file_task}
echo "File ${file}"
# " leght "${#file}
echo "Task for file ${task}"
# " leght "${#task}
echo "Variable name ${variable_name}"
# " leght "${#variable_name}
echo "Variable value ${variable_value}"
# " leght "${#variable_value}
echo " "
# filemanipulations ./${dockerdir}/${folder}/ ${file_task} ${file} ${task} "${variable_name}" "${variable_value}"
done
echo "Done."
Результат:
Start:
Folder nginx
Task create
File default.conf
Task for file
Variable name
Variable value
Folder nginx
Task use
File default.conf
Task for file replace
Variable name server tplphp:9000
Variable value server bbaphp1:9000;
Done.
Вопрос: Где пробелы? Сравните результат с входом:
step_2=("nginx" "use" "default.conf" "replace" "server tplphp:9000" "server bbaphp1:9000;")
Только одно пространство оставлено.
Проблема состоит в том, что полевая функция разделения оболочки Bash удаляет несколько пробелов. Можно предотвратить это путем заключения в кавычки всех расширений переменной/массива. Когда Вы создаете свой составной массив:
declare -a buildfolders=(
"${step_1[@]}"
"${step_2[@]}"
)
Также, когда Вы помещаете части того массива в переменные:
echo "Start:"
arrayleght=${#buildfolders[@]}
for (( i=1; i<${arrayleght}+1; i++ ));
do
folder="${!buildfolders[$i-1]:0:1}"
file_task="${!buildfolders[$i-1]:1:1}"
file="${!buildfolders[$i-1]:2:1}"
task="${!buildfolders[$i-1]:3:1}"
variable_name="${!buildfolders[$i-1]:4:1}"
variable_value="${!buildfolders[$i-1]:5:1}"
Это удержит все на месте несколько пробелов.