【问题标题】:Condition if not general for every command如果不是每个命令的通用条件
【发布时间】:2015-08-01 19:02:22
【问题描述】:

我搜索了 if not 命令,找到了很多特定命令的答案,但是如果我想要任何命令的东西,该怎么做?我想知道是否有办法让每个条件都扭转它的结果......不像知道 -eq 和 -ne......

我想做的不是这个

while [ -z ${!specificCommands[$d]} ]

不适合这个

for (( d=1; d<=$qtyOfParamInACommand; d++ ))

试过

for (( d=1; ![d<=$qtyOfParamInACommand]; d++ ))

但结果不如预期

所以不只是正常的 if... 这可能是简单的语法。我会很感激这个命令的具体答案,但我的意思是像在 C 中一样使用 !

【问题讨论】:

  • while 命令是否也一样?还是在 for 命令的中间?例如,为此,我如何使中间的条件不成立,语法正确? for (( d=1; d
  • 我们在谈论哪种语言?
  • linux,我会加在标题里
  • 你试过空格吗? ! [d&lt;=....]

标签: bash if-statement


【解决方案1】:

相反的:

while   [ -z ${!specificCommands[$d]} ]

是其中之一:

while ! [ -z ${!specificCommands[$d]} ]
while   [ -n ${!specificCommands[$d]} ]

请注意,您还需要为变量加上引号,或者在不需要引号的地方使用双括号。否则,当${!specificCommands[$d]} 为空字符串时,您将遇到麻烦。

# better
while ! [ -z "${!specificCommands[$d]}" ]
while   [ -n "${!specificCommands[$d]}" ]

# best
while ! [[ -z ${!specificCommands[$d]} ]]
while   [[ -n ${!specificCommands[$d]} ]]

否定:

for ((d = 1; d <= qtyOfParamInACommand; d++))

是:

# note: broken
for ((d = 1; !(d <= qtyOfParamInACommand); d++))
for ((d = 1; d > qtyOfParamInACommand; d++))

请注意,$((...)) 中不是必需的。

此外,实际上您不会否定条件,而是会翻转整个循环,使其倒数。我上面写的循环实际上已经坏了。这是一个更恰当的“对立面”:

for ((d = qtyOfParamInACommand; d >= 1; d--))

【讨论】:

  • 谢谢!我只是想知道,对于 for,为什么条件不能在 [] 括号之间?我希望那些 [] 括号适用于包含任何类型的条件?
  • 方括号是一个非常具体的命令。 [ 只是 test 命令的一个(选择不当,IMO)同义词,它要求最后一个参数是 ] 以便它看起来像语法。结果是几代 shell 程序员的困惑,没有任何切实的好处。
  • 啊!!然后我明白了......所以如果我得到它,在for中,默认情况下测试命令已经存在,所以不需要[]
猜你喜欢
  • 2011-08-20
  • 2017-02-15
  • 2012-07-04
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多