LINUX bash中的typeset -l和typeset -u相当于什么?

时间:2012-06-18 14:10:54

标签: linux bash ksh hp-ux

我正在将脚本从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

从我所看到的,printset用于为变量赋值,虽然我不太清楚typeset -utypeset -l具体做什么,这与一般的赋值如foo不同= “栏”。

我想知道是否有一些等效方式来表达LINUX bash的typeset -utypeset -l,因为它似乎与bash不兼容。

从表面上看,我想知道是否可以将typeset命令识别为ksh命令,因为看起来排版来自ksh。

感谢。

3 个答案:

答案 0 :(得分:2)

您从哪个移植到哪个版本的bash? typeset -l生成变量,使得对它的任何赋值都将大写转换为小写; typeset -u将低级转换为高级。我怀疑这些选项在版本4的某个时候添加到bash

答案 1 :(得分:2)

typeset -l-u的行为在Bash,ksh93和mksh中基本相同,它们导致字符串在赋值时分别转换为小写或大写。在ksh中,它们还可以作为长整数和浮点数的修饰符,它们不是常见的shell特征(Bash没有这些)。通常不鼓励使用-u-l,特别是在大型脚本中,他们可以让错误进入。大多数情况下使用大小写修改参数扩展有更好的选择。

Bash下的

typesetdeclare的同义词(Bash认为typeset已弃用 - IMO这不是主要问题)。它们之间存在许多显着差异,除非您注意了解它们的确切行为,否则它们通常应被视为不兼容。在这两个shell中,它们在定义数据类型方面起着重要作用(Bash,zsh和mksh都有一些非重叠的支持,比ksh93更加有限)。

此外,在Linux下安装ksh93(或整个AST工具包)没有问题,除非你真的想要,否则不需要将脚本移植到Bash。 Bash在Linux下作为默认值更受欢迎,主要是出于历史原因,以及在某种程度上,许可(copyleft)。

答案 2 :(得分: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/