1

スクリプトをHP-UXからLINUXに移植中です。スクリプトを入手しようとすると、bashは次のように文句を言います。

bash: typeset: -u: invalid option
typeset: usage: typeset [-afFirtx] [-p] name[=value] ...

typeset: usage: typeset [-afFirtx] [-p] name[=value] ...
./install_profile: line 237: typeset: -l: invalid option

typeset -u私が見ることができることから、typesetは変数に値を割り当てるために使用されますが、何を理解しているかはよくわかりませんtypeset -l。具体的には、foo="bar"などの一般的な割り当てとは異なります。

bashと互換性がないように見えるので、LINUXbashを表現するため typeset -uの同等の方法があるかどうか疑問に思いました。typeset -l

あるいは、タイプセットはkshからのものであるように見えるので、タイプセットコマンドをkshコマンドとして認識させることができるかどうか疑問に思いました。

ありがとう。

4

3 に答える 3

2

どのバージョンのbashから/に移植していますか?typeset -l変数への割り当てが大文字から小文字に変換されるように変数を作成します。typeset -u下から上に変換します。これらのオプションはbash、バージョン4頃に追加されたと思います。

于 2012-06-18T14:18:27.100 に答える
2

typeset -lとの動作-uは基本的にBash、ksh93、およびmkshで同じであり、割り当て時に文字列がそれぞれ小文字または大文字に変換されます。kshでは、これらはさらに、一般的なシェル機能ではない長いintおよびfloatの修飾子として機能します(Bashにはこれらがありません)。-uとを使用-lすることは、特にバグが入り込む可能性のある大きなスクリプトでは一般的に推奨されません。ほとんどの場合、大文字と小文字を変更するパラメーター拡張を使用するより良い代替手段があります。

typesetunder Bashはの同義語ですdeclare(Bashはtypeset非推奨と見なします-IMOはこれは大きな問題ではありません)。それらの間には多くの重要な違いがあり、それらの正確な動作を注意深く知らない限り、それらは一般的に互換性がないと見なされるべきです。どちらのシェルでも、データ型の定義で主要な役割を果たします(Bash、zsh、およびmkshはすべて、ksh93よりもはるかに制限された重複しないサポートを備えています)。

また、Linuxにksh93(またはASTツールキット全体)をインストールすることに問題はなく、本当に必要な場合を除いて、スクリプトをBashに移植する必要はおそらくありません。Bashは、主に歴史的な理由と、ある程度のライセンス(コピーレフト)のために、Linuxのデフォルトとしてはるかに人気があります。

于 2012-06-18T14:40:47.230 に答える
1
$ echo $VAR_NAME | tr '[:upper:]' '[:lower:]'
$ echo $VAR_NAME | tr '[:lower:]' '[:upper:]'

出典: http ://www.cyberciti.biz/faq/linux-unix-shell-programming-converting-lowercase-uppercase/

于 2012-06-18T14:28:22.857 に答える