Bash Shell脚本条件赋值

5

我正在编写一个bash shell脚本。它需要一个必选的第一个参数,我希望有一个可选的第二个参数。

如果省略第二个参数,我希望它使用第一个参数的值。

目前我的代码如下:

SOMEVAR=${2:-Untitled}

如何使用像basename $1这样的东西,而不是Untitled


1
你可能想使用 ${2-Whatever}(不带“:”)来检查 $2 是否 未定义,而不是空或未定义。 - l0b0
2个回答

8
您可以像这样做:SOMEVAR=${2:-$(basename“$1”)}。您可以在可选部分中使用任何shell或变量。

3

直接使用命令替换: $(basename $1),代替Untitled

然而,bash也有在没有外部进程的情况下完成此操作的能力:${1##*/}

SOMEVAR=${2:-${1##*/}}

使用${1##*/} shell扩展的问题在于它并不能完全替代basename。basename不仅仅是查找最后一个'/'字符。 - norcalli
${1##*/}е’Ң$(basename $1)жҳҜзӯүд»·зҡ„еҗ—пјҹ - alfonso
1
不,${1##*/}并不等同于$(basename $1)。例如,如果你有dir=/并尝试${dir##*/},你将得到空值,而$(basename "$dir")会给你/ - norcalli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接