Malamut
@Malamut

Какой тип данных у $@ в BASH?

Потихоньку сталкиваюсь с разными тонкостями BASH и зашёл в тупик. Никак не могу понять простую вещь - какой тип данных у $@ и ${somearray[@]}? Точнее даже не так, первый вопрос такой: правда ли что $@ по поведению и возможностям использования полностью аналогично ${somearray[@]}? (где somearray - какой-нибудь массив).

А второй вопрос, собственно - какой тип данных у $@ и, самое главное, где-бы почитать исчерпывающую информацию на тему того, как с этим типом данных работать и к чему приводит его использование в различных ситуациях?

Поясню: есть такие хитрости по типу ${@: -1}. Если бы $@ был бы строкой, то такая конструкция возвращала бы последний символ. А она возвращает последний элемент массива, в случае с $@ - последний элемент вообще говоря несуществующего массива всех входных аргументов.

Проясните, пожалуйста, что это вообще за зверь такой, как с ним работать и самое главное - какие у него есть возможности?

Как я понимаю, $@ - это некоторый промежуточный псевдотип, нечто между массивом и строкой, который получить внешними средствами невозможно. $@ практически всегда прикидывается строкой разделённых пробелами компонент, и единственное его уникальное свойство, которое я нашёл - то самое ${@: N} - отрезание первых или последних N компонент. Более ничего вразумительного накопать/надумать не удалось. Очень рассчитываю на помощь, хотелось бы разобраться.
  • Вопрос задан
  • 2725 просмотров
Пригласить эксперта
Ответы на вопрос 1
3vi1_0n3
@3vi1_0n3
Вообще это скорее нетипизированный массив, тип значения любого члена которого зависит от интерпретации. В общем, все массивы в bash можно считать нетипизированными.
#!/bin/bash
echo $@
array=()
array=$@
echo ${array[@]}


Если этот скрипт запустить так:
./script.sh 1 2 3 4 5
этот код выведет следующее:
1 2 3 4 5
1 2 3 4 5

Если так:
./script.sh "1" "2" "3" "4" "5"
то следующее:
1 2 3 4 5
1 2 3 4 5

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы