【问题标题】:How to know if an argument was passed to my bash script?如何知道参数是否已传递给我的 bash 脚本?
【发布时间】:2015-05-08 01:54:34
【问题描述】:

假设我有一个 bash 脚本 scr.sh。在这个脚本里面我有一个变量$x。我需要设置以下行为。如果scr.sh 是用参数调用的,如:

./scr.sh 45

然后我想在我的 bash 脚本中将 x 分配给这个值。否则,如果没有命令行参数,如:

./scr.sh

x 应该分配给一些默认值,在我的例子中是一个环境变量,比如x=$ENVIRONMENT_VAR

我该怎么做?

【问题讨论】:

标签: linux bash command-line-arguments


【解决方案1】:

您可以使用它来设置默认值:

x="${1:-$ENVIRONMENT_VAR}"

${参数:-字} 使用默认值。如果参数未设置或为空,则单词的扩展为 代替。否则,参数的值被替换。

【讨论】:

  • 我希望更多的人了解${parameter:[-+?=]word} 范式的强大功能。祝大家好运。
  • @shellter 有没有解释${parameter:[-+?=]word}的链接?
  • @becko : http://tldp.org/LDP/abs/html/parameter-substitution.html 是我所知道的最好的。祝大家好运。
  • 如果空字符串 (./scr.sh "") 是不应替换为 ENVIRONMENT_VAR 的值的有效参数,您想使用 ${1-$ENVIRONMENT_VAR}
  • @becko 它们都记录在手册页的参数扩展下。
【解决方案2】:

虽然@Cyrus 已经很好地回答了这个问题,但我想提供${parameter:-word} 方法的细微变化,即:

: ${x:=${1-$ENVIRONMENT_VAR}}

这使您可以更进一步,并在调用脚本时提交覆盖功能。下面你会看到使用这种方法可以拥有的三个不变量:

$ ./src.sh
x=42
$ ./src.sh 8
x=8
$ x=2 ./src.sh 8
x=2

用于上述输出的脚本:

$ cat ./src.sh
#!/usr/bin/env bash

ENVIRONMENT_VAR=42
: ${x:=${1-$ENVIRONMENT_VAR}}
echo "x=${x}"

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 2012-01-23
    • 2013-06-18
    • 2011-04-18
    • 2021-11-18
    • 2012-12-29
    相关资源
    最近更新 更多