【问题标题】:AIX conditional multiple command executionAIX 有条件的多条命令执行
【发布时间】:2014-08-29 17:45:09
【问题描述】:

希望有人可以提供帮助。 我正在尝试在 ksh 上执行以下操作。 有一个名为 var 的变量和一个名为 var1 的变量。

var=
var1=Y
[[ $var1 = "N" ]] || (command 1; var=N)

执行上述操作时,变量“var”没有赋值。该命令正在执行,但就像“var”超出范围并且它正在创建一个新变量(我在分配得到正确值 N 回显后尝试回显)。

[[ $var1 = "N" ]] || (command 1; var=N; echo $var)

有人知道解决这个问题的方法吗?

我使用双管道的原因是为了避免使用 IF 语句,因为我有大量相同的条件。

谢谢

【问题讨论】:

  • ( .... ) 中设置的变量是子shell (...) 的本地变量。您所看到的是预期的行为。如果您必须使用子shell,那么最简单的方法是echo "$var" > /tmp/varFile,然后阅读/tmp/varfile 以获取值(还有其他解决方案,但得到了易于调试的解决方案;-))。祝你好运。
  • 谢谢。我会把它作为答案,但不能标记它。 :P。谢谢
  • 如果您需要有关如何将/tmp/varfile 读入变量的帮助,我可以写出更详细的答案。很高兴这有帮助。祝你好运。
  • 命令 'if-then-else-fi' 也可用于此类目的...

标签: shell scripting ksh aix


【解决方案1】:

使用带有 { ... } 而不是 ( ... ) 的命令分组,如

[[ $var1 = "N" ]] || { command 1; var=N; echo $var; }

这避免了对分组命令列表进行 subshel​​ling,从而保持分配给变量的值。这适用于 AT&T 和 MirBSD Korn Shells。

【讨论】:

  • 我希望 sergiopuy 回来并勾选这个......这是一个更好的答案。它也适用于 bash。
  • 谢谢大家,虽然我已经更改了脚本。它会派上用场:)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2017-04-11
相关资源
最近更新 更多