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 -utypeset -l具体做什么与诸如 foo="bar" 之类的一般赋值不同。

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

或者,我想知道是否可以将排版命令识别为 ksh 命令,因为排版似乎来自 ksh。

谢谢。

4

3 回答 3

2

您要从/移植到哪些版本的 bash?typeset -l使变量使得对它的任何赋值都将大写转换为小写;typeset -u将下转换为上。我怀疑这些选项是bash在版本 4 左右的某个时候添加的。

于 2012-06-18T14:18:27.100 回答
2

和的行为在 Bash、ksh93typeset -l-umksh 中基本相同,它们导致字符串在赋值时分别转换为小写或大写。在 ksh 中,它们还充当长整数和浮点数的修饰符,这不是常见的 shell 功能(Bash 没有这些)。通常不鼓励使用-uand ,尤其是在它们可能让错误溜进来的大型脚本中。大多数时候使用 case-modification 参数扩展有更好的选择。-l

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

此外,在 Linux 下安装 ksh93(或整个 AST 工具包)也没有问题,除非您真的愿意,否则可能不需要将脚本移植到 Bash。Bash 作为 Linux 下的默认设置更受欢迎,这主要是出于历史原因,在一定程度上是许可(copyleft)。

于 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 回答