击:如何设置一个变量,从论证,并用默认值(Bash: How to set a variable f

2019-08-31 11:03发布

这是很清楚的,与shell脚本这样的事情可以在方式(超过大多数编程语言),一个庞大的数字,因为所有不同的变量扩展的方法和程序,如来完成test[[[

现在我只是在寻找

DIR=$1 or .

意思是,我的DIR变量应包含什么是在第一个参数或当前目录中指定。

是什么这之间的差异DIR=${1-.}

我发现连字符语法混乱,并寻求更可读的语法。

为什么我不能这样做呢?

DIR="$1" || '.'

我猜这意味着“如果$ 1为空,分配仍然有效(DIR为空),这样的无效命令‘’ 从来没有得到执行“。

Answer 1:

我在这里看到的几个问题。

  1. “我能写的东西,实际上反映了这一逻辑”

    是。 还有,你能做到这一点的几种方法。 这是一个:

     if [[ "$1" != "" ]]; then DIR="$1" else DIR=. fi 
  2. “这是什么这之间的差异DIR=${1-.} ?”

    语法${1-.}扩展到. 如果$1没有设置,但像扩展$1如果$1被设置-即使$1设置为空字符串。

    语法${1:-.}扩展到. 如果$1未设置或设置为空字符串。 它扩展像$1只有$1被设置为空字符串以外的东西。

  3. “为什么我不能这样做呢? DIR="$1" || '.'

    因为这是bash中,不使用Perl或Ruby或其他语言。 (请原谅我的snideness。)

    在bash, || 分离整个命令(在技术上它分离管道)。 它不分开表述。

    所以, DIR="$1" || '.' DIR="$1" || '.' 装置“执行DIR="$1" ,并且如果与一个非零退出代码退出,执行'.' ”。



Answer 2:

这个怎么样:

DIR=.
if [ $# -gt 0 ]; then
  DIR=$1
fi

$#是给脚本的参数的数量和-gt是指“大于”,所以你基本上设置DIR为默认值,如果用户指定的参数,然后设置DIR到代替。



文章来源: Bash: How to set a variable from argument, and with a default value
标签: bash shell unix