Answers:
${#1}是$1该函数的第一个参数的长度(以字符数为单位)。
因此(( ${#1} == 0 )),一种复杂的方法可以测试第一个参数是否为空(或未设置,展开时未设置的参数显示为空)。
要测试一个空参数,规范的方法是:
[ -z "$1" ]
但是在那里,更可能的目的是检查是否向函数提供了参数,在这种情况下,语法将是:
[ "$#" -eq 0 ]
(或者(($# == 0))如果您想将脚本设置为ksh / bash / zsh专用)。
但是,在两种情况下,类似伯恩的炮弹都有捷径:
test=${1:--} # set test to $1, or "-" if $1 is empty or not provided
test=${1--} # set test to $1, or "-" if $1 is not provided
现在,如果目的是将其传递给cat其他文本实用程序,以便-在不提供任何参数的情况下传递(含义为stdin),那么您可能根本不需要任何参数。
代替:
getlable() {
test=${1--}
cat -- "$test"
}
做就是了:
getlable() {
cat -- "$@"
}
该函数的参数列表将原样传递给cat。如果没有参数,则不cat接收任何参数(然后从stdin读取,就好像它是单个-参数一样)。并且,如果有一个或多个参数,它们将全部按原样传递给cat。
${#1} 是第一个位置参数的长度。
在运行的外壳中,您可以使用
set -- foo bar
echo ${#1}
3
设置它们。
echo ${#1}在该语句之前放置一个以查看其值是什么?如果是这样,通常应将您在该研究中发现的内容包括在问题中,并可能解释为什么它没有帮助。