1

我想获得"$*"在我的函数中使用时得到的字符串的长度。

我试过了:

echo ${#"$*"}

echo ${#"*"}

两者都给了我一个糟糕的替换错误。

4

4 回答 4

1

我不认为你可以在一个命令中做到这一点。但是,这似乎有效:

#!/bin/bash
a="$@"
echo "${#a}"
于 2013-08-15T18:31:41.593 回答
0

使用临时变量是唯一一种基本方法,您需要取消设置 IFS 或将其设置为空字符串以防止中间出现空格。并使用 $* 而不是 $@ 因为它会给你之间的空格:

IFS= eval "__=\"\$*\""
echo "${#__}"

另一种方法是遍历所有字符串:

L=0; for __; do (( L += ${#__} )); done
echo "$L"
于 2013-08-15T19:10:05.040 回答
0

$# 保存传递给函数的位置参数的数量。

试试看:

#!/bin/bash

t() {
  echo "num args=$#"
  echo "all $*"
}

t "$@"
于 2015-01-19T16:20:59.700 回答
0

您可以使用以下方法之一。

expr length "$*"
echo "$*" | awk '{print length}'
于 2013-08-15T20:31:09.237 回答