Каково различие между и * при ссылке на значения массива удара?

Не знайте, является ли это корректной фиксацией. Я действительно проверял Run command as a login shell в разделителе-> профили-> Команда.

15
07.06.2014, 17:35
2 ответа

Разница тонкая; "$*" создает один аргумент, а "$@" разворачивается на отдельные аргументы, так что:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
 echo "example.$i"
done

будет работать со списком (распечатает его) как с несколькими переменными

, а

LIST=(1 2 3)
for i in "${LIST[*]}"; do
 echo "example.$i"
done

будет работать со списком как с одной переменной.

17
27.01.2020, 19:50

Использование [*]создаст одну строку , где каждый элемент вашего массива будет разделен первым символом$IFS(пробелом по умолчанию ).

Использование [@]создаст список .

Примеры:

Создание массива:

$ list=( a b "big fish" c d )

Печать каждого элемента по отдельности:

$ printf 'data: ---%s---\n' "${list[@]}"
data: ---a---
data: ---b---
data: ---big fish---
data: ---c---
data: ---d---

Создание одной строки и ее печать:

$ printf 'data: ---%s---\n' "${list[*]}"
data: ---a b big fish c d---

Опять же, но с настраиваемым разделителем:

$ IFS='/'
$ printf 'data: ---%s---\n' "${list[*]}"
data: ---a/b/big fish/c/d---

Обратите внимание, что использование этих расширений без двойных кавычек редко имеет смысл.

2
26.03.2021, 11:17

Теги

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