请解释一下下面的用法${#1}
:
getlable ()
{
if (( ${#1} == 0 )); then test="-"; else test="${1}"; fi;
}
答案1
${#1}
$1
是函数第一个参数的长度(以字符数为单位) 。
这(( ${#1} == 0 ))
是一种复杂的方法来测试第一个参数是否为空(或未设置,未设置的参数在展开时显示为空)。
要测试空参数,规范的方法是:
[ -z "$1" ]
但在那里,更可能的目的是检查是否向函数提供了参数,在这种情况下,语法将是:
[ "$#" -eq 0 ]
(或者(($# == 0))
如果您想让您的脚本 ksh/bash/zsh 特定)。
然而,在这两种情况下,类似 Bourne 的 shell 都有捷径:
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
.
答案2
${#1}
是第一个位置参数的长度。
在正在运行的 shell 中,您可以使用
set -- foo bar
echo ${#1}
3
设置它们。