Я пытаюсь получить сценарий для изменения порядка входов (да, я знаю, что команда "tac" уже делает это), мой сценарий выглядит следующим образом: строка F печати, которая печатает значение массива, а затем следует новая строка, будет не печатать мою новую строку, и это действительно раздражает.

Я попытался отделить его и поместить printf "\n" в строку, следующую сразу за строкой, чтобы напечатать значение индекса массива, но, похоже, это тоже не работает.

#!/bin/bash

a=()
while read line; do
    a+="$line"
done

for ((i = 0 ; i <= ${#a[@]} ; i++)); do
    printf "${a[$i]}\n"
done

1 ответ1

0

Проблема не в вашем выражении printf , а в вашем назначении при чтении - вы смешиваете синтаксис добавления в массив с назначением значения элемента. Чтобы добавить к массиву, вам нужно вместо этого использовать a+=("$line") . Если вы хотите использовать синтаксис без скобок, вам необходимо указать индекс элемента, который вы хотите изменить, например a[5]="$line" .

Вы можете найти больше примеров о массивах, например, в этой ссылке на документацию Stackovewflow (см. Раздел "Модификация массива").

Также обратите внимание, что ваш скрипт не печатает строки в обратном порядке. Для этого вам нужно повернуть цикл for чтобы выполнить итерацию от конца массива к началу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .