sh 脚本函数内参数的长度

sh 脚本函数内参数的长度

我有一个 FreeBSD 9.3 RELEASE 服务器,我正在尝试使用sh.我试图获取传递给 shell 脚本中函数的变量的长度,如下所示:

#!/bin/sh

myfunc() {
  varlength=${#1}
  echo $varlength
}

test="aaaaa aaaaa"
myfunc $test

上面的脚本应该返回 11,这是测试变量的长度,但是 ${#1} 似乎不起作用。我还尝试了许多其他方法来实现这一目标,但我无法弄清楚。

varlength=$(expr ${#1})  does not work
varlength=$(${#1})  does not work
varlength=$(expr \( "X$1" : ".*" \) - 1)  does not work
varlength=$({#1})  does not work

我所做的许多其他尝试都失败了。

答案1

因为$test包含空格,当你说

myfunc $test # without quotes

你的函数接收 > 1 个参数。 myfunc 在这里接收 2 个参数,aaaaa并且 aaaaa.

你要这个:

myfunc "$test" # with quotes

经验法则:总是引用你的,"$variables"除非你确切知道何时以及为什么不这样做。

相关内容