gpt4 book ai didi

shell - KornShell - 在 IF 语句中分组条件

转载 作者:行者123 更新时间:2023-12-01 12:45:38 24 4
gpt4 key购买 nike

我在 KornShell (ksh) 上遇到以下代码片段失败:

var1="1"
var2="2"
if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
echo "True"
else
echo "False"
fi

ksh: syntax error: `"$var1"' unexpected

据我所知,这失败了,因为括号在无法识别 var1 的子 shell 中运行。那么如何将条件集分组在方括号内呢?

注意我已经知道以下解决方案但不想使用它们:

  • 将条件放在单独的嵌套 if 语句中。
  • 优化/重新安排条件,以便将它们放在一组中。

最佳答案

你在找这个吗?

#!/bin/ksh

if [[ -n $1 || -n $2 ]] && [[ $1 == "$2" || $1 == x ]]; then
echo "True"
else
echo "False"
fi

运行:

$ ./if.sh "" ""
False

$ ./if.sh 1 2
False

$ ./if.sh 1 1
True

$ ./if.sh x 2
True

如果您想知道为什么您的代码会失败:

  1. 你需要转义括号 \(
  2. 括号两边必须有一个空格
  3. 而且你打错了,有一个多余的"飘来飘去

所以这个...

if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
typo ---^ ^
^------------------ missing spaces --------^

...应该是这样的...

if [ \( "$var1" != "" -o "$var2" != "" \) -a \( "$var1" = "$var2" -o "$var1" = "x" \) ]; then

然后它就会起作用。

关于shell - KornShell - 在 IF 语句中分组条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16283297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com