$ {#1}的值是多少?


9

请解释以下用法${#1}

getlable ()     
{
    if (( ${#1} == 0 )); then test="-"; else test="${1}"; fi;
}

1
只是想知道:您是否烦恼echo ${#1}在该语句之前放置一个以查看其值是什么?如果是这样,通常应将您在该研究中发现的内容包括在问题中,并可能解释为什么它没有帮助。
jpmc26 2016年

Answers:


24

${#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


现在您可以通过它来提供出色的答案了:)
Yerken

4

${#1} 是第一个位置参数的长度。

在运行的外壳中,您可以使用

set -- foo bar
echo ${#1}
3

设置它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.