web-dev-qa-db-ja.com

bashで変数の型を取得する

Pythonでは、次のようにして変数型を取得できます:

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

私は このページ で、bashに変数型がないことを確認しました。説明は次のとおりです。

型なし変数は、祝福と呪いの両方です。これにより、スクリプト作成の柔軟性が高まり、コード行を簡単にグラインドアウトできます(そして、自分自身をぶら下げるのに十分なロープを与えることができます!)。ただし、これらは同様に、微妙なエラーが侵入し、ずさんなプログラミング習慣を助長することを許可します。

しかし、それが何を意味するのか、そして実際の利点(および欠点)は何なのかわかりません。

17
tlorin

BashにはPythonと同じように型はありません(Pythonには型ではなくクラスがあると言いますが)。しかし、bash変数にはattributesdeclareを通じて(ほとんど)与えられますが、属性の範囲はかなり小さいです。declare -p、たとえば、declare -iは整数を作成します。

declare -i num
num=42
declare -p num

与える:

declare -i num="42"

しかし、これはPythonやほとんどすべての現代の言語と比較して劣った機能です。問題は、Bashのようなものでは、基本的なタイプがテキスト文字列であり、ファイル名などのテキスト文字列が必要な場合は問題ありません。ただし、重い処理が必要になると、他のタイプが必要になります。たとえば、Bashは浮動小数点をサポートしていません。また、ファイルが持つことができるすべての属性を持つファイルを記述するクラスのように、compound型も必要です。

Bash 4には、連想配列declare -A)があり、Python辞書と同様に、機能が大幅に拡張されています) 。

それでも、ほとんどの人はBashではオブジェクト指向がほとんど不可能であることに同意しますが、Korn Shell(はるかに強力な機能を備えている)でオブジェクト指向を実行できると主張する人もいます。 http://en.wikipedia.org/wiki/Object-oriented_programming

Bashが持っているものは、それが意図されているもの-すばやく簡単に動作する単純な処理-に適しています。しかし、そのような言語を使用すると扱いにくくなり、エラーが発生しやすくなり、速度が低下する重大な問題があります。その重要な質量は、規模、つまり大量のデータ、または複雑さのいずれかです。

Bashの使用を停止してPythonに切り替える必要がある単純なカットオフポイントはありません。プログラムがますます複雑になり、大きくなるにつれて、Pythonを使用するケースが強​​くなります。

シェルスクリプトは、時間の経過とともにめったに小さくなったり複雑になったりしないことを付け加えておきます。

12
cdarke