Не знайте, является ли это корректной фиксацией. Я действительно проверял Run command as a login shell
в разделителе-> профили-> Команда.
Разница тонкая; "$*" создает один аргумент, а "$@" разворачивается на отдельные аргументы, так что:
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
будет работать со списком как с одной переменной.
Использование [*]
создаст одну строку , где каждый элемент вашего массива будет разделен первым символом$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---
Обратите внимание, что использование этих расширений без двойных кавычек редко имеет смысл.