Bash не добавляет массив в новый индекс. Просто расширяет первый индекс

Чтобы действительно сообщить обо всех атрибутах, можно использовать аргумент -dm-, который представляет собой аргументы -d и -m-.

Например, я запустил Chromium, перешел к https://bugsfiles.kde.org/attachment.cgi?id=86198, это действие начало скачивать файл, и я назвал его "my_downloaded_file".

Затем я выполнил getfattr -m- my_downloaded_file и он показал:

# file: my_downloaded_file
user.xdg.origin.url

хотя больше информации было показано при выполнении getfattr -dm- my_downloaded_file:

# file: my_downloaded_file
user.xdg.origin.url="https://bugsfiles.kde.org/attachment.cgi?id=86198"

Ссылки:

- man getfattr
- https://unix.stackexchange.com/a/46587
- https://unix.stackexchange.com/a/50781
- https://www.pixelbeat.org/docs/linux_commands.html
- https://kign.blogspot.com.es/2008/08/mystery-of-plus.html

0
07.03.2019, 13:22
2 ответа

Добавление новых элементов в массив:

array+=( new elements here )

В вашем случае:

my_array+=( "$extracted_value" )

Когда вы делаете

array+=$variable

вы добавляете к первому элементу массива. Это то же самое, что

array[0]+=$variable

Также обратите внимание, что в

extracted_value=$(./external_script.sh $file $sub_unit )

значения $fileи $sub_unitбудут разделены пробелами и подвергнутся подстановке имени файла. Чтобы предотвратить это, используйте "$file"и "$sub_unit"вместо (, т.е. двойные -кавычки расширения переменных ).

Подобным образом, говоря

my_array+=( $extracted_value )

разделит значение $extracted_valueна несколько слов, и каждое слово будет подвергнуто подстановке имени файла для создания нового элемента в массиве. Вот лучше бы написали (как уже упоминалось ),

my_array+=( "$extracted_value" )

Это общий совет, и нет причин не этого не делать, даже если вы знаете, что ваши значения уже представляют собой отдельные слова, не содержащие подстановочных символов.

7
28.01.2020, 02:14

Вы добавили к строке и прочитали ее как массив (, как Кусалананда объяснил намного выше ). Но ваш вопрос показывает, как переменную можно рассматривать как массив. На самом деле простая переменная может легко стать массивом.

$ a+=1
$ a+=2
$ echo "$a"
12
$ echo "${a[0]}"
12
$ a+=(3)
$ echo "$a"
12
$ echo "${a[0]}"
12
$ echo "${a[1]}"
3
0
28.01.2020, 02:14

Теги

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