${#1} 的值是多少?

${#1} 的值是多少?

请解释一下下面的用法${#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

设置它们。

相关内容