Почему Bash не распознает мой символ новой строки?

336
Anyon

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

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

#!/bin/bash  a=() while read line; do a+="$line" done  for ((i = 0 ; i <= ${#a[@]} ; i++)); do printf "$\n" done 
0

1 ответ на вопрос

0
Adalee

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

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

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