TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #482 979
Разница между "$@" и "$*", и почему это ломает скрипты

Оба варианта выглядят почти одинаково, но ведут себя принципиально по-разному, особенно если в аргументах есть пробелы.

Предположим, скрипт запущен так:


./script.sh "file one.txt" "file two.txt"


▪️ "$@" - правильный вариант


for arg in "$@"; do
echo "[$arg]"
done


Вывод:


[file one.txt]
[file two.txt]


Каждый аргумент сохраняется как отдельная сущность.
Это то, чего вы ожидаете в 99% скриптов.

▪️ "$*" - частая ловушка


for arg in "$*"; do
echo "[$arg]"
done


Вывод:


[file one.txt file two.txt]


Все аргументы склеены в одну строку через IFS (по умолчанию пробел).

▪️ Почему это ломает скрипты

Передача аргументов дальше:


rm "$*"


rm получает один путь, которого не существует.

Обработка файлов:


cp "$*" /backup


копирование падает или ведет себя странно.

Работа с пробелами:

один аргумент = несколько файлов (по мнению bash).

BashTex 📱 #bash #utils
  • 👍 10
More from @bash_tex
  1. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  2. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  3. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  4. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  5. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  6. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →