Резюме
В зависимости от того, что bash
или же awk
версии, которая у меня есть, я получаю разные результаты, когда пытаюсь разрезать массив, содержащий awk
выход. В более старых версиях bash
и awk
«операция среза» (например, ${a[@]:2}
) неправильно возвращает массив с одним элементом независимо от того, сколько элементов осталось в нарезанном массиве. Однако это кажется проблемой только при нарезке массивов, которые «захватывают» awk
выход.
MWE
Вы можете запустить следующее, чтобы воспроизвести проблему:
bash array_slice.sh text.file
куда
array_slice.sh
иtext.file
следующие:array_slice.sh
сценарий:#!/usr/bin/env bash defaultIFS=$IFS IFS=$'n' t=($(awk '{ printf("%sn", $0) }' "$1")) printf "nArray 't' has ${#t[@]} elementsn" printf "Elements of array 't':n" printf "%sn" "${t[@]}" t45=( ${t[@]:4} ) printf "nArray 't45' has ${#t45[@]} elementsn" printf "Elements of array 't45':n" printf "%sn" "${t45[@]}"
text.file
:some text some other text this is text too text above is text and text below is text text text text
Вывод для различных платформ
Обратите внимание, как массив t45
имеет только один элемент в выводе Ubuntu 16.04 (предполагается, что их должно быть два) и как он правильно имеет два элемента в выводе Ubuntu 20.04.
Ubuntu 16.04 с
- GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
- GNU bash, версия 4.3.48 (1) -release (x86_64-pc-linux-gnu) Дает:
Array 't' has 6 elements Elements of array 't': some text some other text this is text too text above is text and text below is text text text text Array 't45' has 1 elements Elements of array 't45': and text below is text text text text
Ubuntu 20.04 с
- GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
- GNU bash, версия 5.0.17 (1) -release (x86_64-pc-linux-gnu) Дает:
Array 't' has 6 elements Elements of array 't': some text some other text this is text too text above is text and text below is text text text text Array 't45' has 2 elements Elements of array 't45': and text below is text text text text