【问题标题】:Unary operator expected in BashBash 中预期的一元运算符
【发布时间】:2014-04-01 22:43:12
【问题描述】:

我看到过有关同一问题的问题,但所有问题都与字符串有关。整数呢?为什么我会收到“预期的一元运算符”错误?

 if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi

【问题讨论】:

标签: bash integer operator-keyword


【解决方案1】:

您正在使用间接。如果变量${BLOCK1FRAN} 指向一个空变量,您将收到错误消息。确保${BLOCK1FRAN} 指向的变量包含有效的数值。

如果您希望将空字符串和非数字值计算为零 (0),请使用以下语法。

if [[ $(date +%k%M) -ge ${!BLOCK1FRAN} ]]; then whatever ; fi

【讨论】:

  • +1 另一种方法:在 bash 中声明您希望为数字的名称以具有整数属性。这给人一种间接的感觉,但也保证了该值将是数字的。 declare -i x BLOCK1FRAN; BLOCK1FRAN=x; echo $BLOCK1FRAN
  • 双括号而不是单括号似乎效果很好,谢谢。请问这是为什么?为什么有人会选择使用 [ instad of [[?
  • [ and ][[ and ]] 的主要区别在于后者不进行分词和路径名扩展。例如,如果您在[ and ] 中有*,它将扩展到$PWD 中的文件,而[[ and ]] 中的相同* 不会。并且很可能您打算使用文字 *。有关详细信息,请参阅 bash 手册页。
【解决方案2】:

我觉得不错。你确定你已经正确设置了 BLOCK1FRAN 吗?

whatever() { echo "it works"; }
foo=42
BLOCK1FRAN=foo
if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi

it works

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多