【问题标题】:BASH: testing the number of arguments passed in an IF statementBASH:测试 IF 语句中传递的参数数量
【发布时间】:2015-08-23 10:41:13
【问题描述】:

我正在尝试向 .run 文件发送两个参数。 $2 默认应该是 0。

如果 $2 arg = 1 那么

grep -i a -1 --color -E $1 *.*

其他

grep -i --color -E $1 *.*

, 像这样的

if [${2:-0} = 1] then
  grep -i a -1 --color -E $1 *.*
else
  grep -i --color -E $1 *.*
fi

但它似乎没有工作?有什么想法吗?

谢谢

【问题讨论】:

标签: bash if-statement arguments


【解决方案1】:

你的问题留下了一些关于你想要做什么的猜测工作。你没有在任何地方使用$2,所以你只是想用它作为一个标志来决定以不同的方式运行grep?如果是这样,使用$# 将告诉您传递了多少个参数。要测试它们是否有两个,您可以使用(( $# = 2 ))

正如 Tom Fenech 所建议的,您的代码中有语法错误。在]then 之后应该有一个分号,应该换行。另外,我相信您在[] 之前需要空格。所以这里是你可能一直在尝试做的猜测:

if (( $# == 2 ));  then
  grep -i a -1 --color -E $1 *.*
else
  grep -i --color -E $1 *.*
fi

【讨论】:

  • 如果你想测试整数相等,你应该使用-eq。对于字符串,使用=== 受 bash 支持,但不支持其他 shell。
  • 非常感谢您的想法,这正是我想要的。谢谢
  • @Tom Fenech:要点。我已将 [ .. ] 更改为 (( .. ))
【解决方案2】:

方括号不只是语法:[ 实际上是一个命令,因此它需要空格将其与其参数分开:

if [ ${2:-0} = 1 ]; then

https://www.gnu.org/software/bash/manual/bashref.html#index-test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多