Получить тип переменной в bash

в Python я могу получить тип переменной:

>>> i = 123
>>> type(i)
<type 'int'>

Я видел на этой странице что в bash нет типов переменных. Приведенное объяснение:

нетипизированные переменные являются как благословением, так и проклятием. Они позволяют больше гибкости в написании сценариев и облегчают измельчение строк кода (и дают вам достаточно веревки, чтобы повеситься!). Тем не менее, они также позволяют тонкие ошибки ползать и поощрять небрежное Программирование привычки.

но я не уверен, что это означает и каковы реальные преимущества (и недостатки).

1 ответов


Bash не имеет типов так же, как Python (хотя я бы сказал, что Python имеет классы, а не типы). Но переменные bash имеют атрибуты что дают (в основном) через declare, но диапазон атрибутов довольно мал. Вы можете найти атрибут, используя declare -p, например, declare -i создает целое число:

declare -i num
num=42
declare -p num

выдает:

declare -i num="42"

но это плохая функция по сравнению с Python или почти любым современным языком. Этот проблема в том, что в чем-то вроде Bash основным типом является текстовая строка, и это нормально, если все, что вам нужно, это текстовые строки для таких вещей, как имена файлов. Но как только вы начинаете делать тяжелую обработку, вам нужны другие типы. Например, Bash не поддерживает плавающую точку. Вам также нужно соединение типы, такие как класс, описывающий файл со всеми атрибутами, которые может иметь файл.

Bash 4 имеет ассоциативные массивы (declare -A), похожий на Python словари, что значительно расширяет функциональные возможности.

тем не менее, большинство согласится, что ориентация объекта практически невозможна в Bash, хотя некоторые утверждают, что это можно сделать в оболочке Korn (которая имеет гораздо более мощные функции). http://en.wikipedia.org/wiki/Object-oriented_programming

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

нет простой точки отсечения, где вы должны прекратить использовать Bash и переключиться на Python. Его просто, что по мере того, как программы становятся все более сложными и большими, случай использования Python становится сильнее.

Я должен добавить, что скрипты оболочки редко становятся меньше и менее сложными с течением времени!