Пробелы, отсутствующие в строках в массиве Bash

Я нашел странную вещь и буду хорош, если кто-то может помочь зафиксировать ее.

#!/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;")

Только одно пространство оставлено.

0
задан 4 December 2018 в 00:29

1 ответ

Проблема состоит в том, что полевая функция разделения оболочки 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}"

Это удержит все на месте несколько пробелов.

2
ответ дан 27 October 2019 в 01:32

Другие вопросы по тегам:

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