Linux 寻找一个shell脚本,其中包含;字体-r VAR=value";

Linux 寻找一个shell脚本,其中包含;字体-r VAR=value";,linux,ksh,Linux,Ksh,修改包含脚本的脚本的好方法是什么 “typeset-r VAR=value” 要使脚本可重复(同时维护语句) 目前,登录时用户的.profile文件会将讨论中的脚本点入,然后用户从命令行运行的其他脚本会再次点入 按原样,脚本将在后续运行时出错,因为VAR已经是只读的 uname-a:Linux demon 2.6.32-131.0.15.el6.x86_64#1 SMP周二5月10日15:42:40美国东部夏令时2011年x86_64 x86_64 GNU/Linux 问题更新: 如果您通过用户

修改包含脚本的脚本的好方法是什么

“typeset-r VAR=value”

要使脚本可重复(同时维护语句)

目前,登录时用户的.profile文件会将讨论中的脚本点入,然后用户从命令行运行的其他脚本会再次点入

按原样,脚本将在后续运行时出错,因为VAR已经是只读的

uname-a:Linux demon 2.6.32-131.0.15.el6.x86_64#1 SMP周二5月10日15:42:40美国东部夏令时2011年x86_64 x86_64 GNU/Linux

问题更新:

如果您通过用户的
.profile
脚本注释掉脚本A中的圆点,那么在登录脚本B时,脚本A中的哪些圆点可以反复运行而不会出现问题。但是,如果随后从命令行运行脚本A,则脚本B的后续调用将出错

是什么解释了这种行为

  • 这似乎是因为
    .profile
    在系统上最大的shell中运行,而脚本B在临时子shell中运行
怎么修的

  • 如何更新脚本B,以便在尝试设置VAR值并使VAR为只读之前检查VAR的只读性和值
    • 您可以:

      test -z "${VAR+set}" && typeset -r VAR=value test-z“${VAR+set}”和&typeset-rvar=value
      你是在运行脚本还是在寻找它?我只能通过寻找脚本来复制问题;改为试着运行它。脚本由用户的.profile脚本点缀;随后,它被用户选择运行的其他脚本点缀。这将检查${VAR-x}的长度是否为零,但${VAR-x}是什么?如果$VAR未设置,则${VAR-x}是x,否则是$VAR。因此,只有当VAR设置为空字符串时,${VAR-x}才是空的。(与${VAR:-x}相反,如果VAR未设置或为空,${VAR:-x}就是x。)酷,那么-运算符叫什么?所以如果$VAR为空,我们要执行“typeset-r VAR=value”。在这种情况下,在左手边返回true会起作用。啊,好吧,现在看来有意义了。第二个${VAR:-x}更好,我们需要x的长度为零。