att*_*182 5 bash string-length
我查看下面的代码,发现$#和$ {#@}都打印相同的值.有人能告诉我两者之间有什么区别吗?
# length.sh
E_NO_ARGS=65
if [ $# -eq 0 ] # Must have command-line args to demo script.
then
echo "Please invoke this script with one or more command-line arguments."
exit $E_NO_ARGS
fi
var01=abcdEFGH28ij
echo "var01 = ${var01}"
echo "Length of var01 = ${#var01}"
# Now, let's try embedding a space.
var02="abcd EFGH28ij"
echo "var02 = ${var02}"
echo "Length of var02 = ${#var02}"
echo "Number of command-line arguments passed to script = ${#@}"
echo "Number of command-line arguments passed to script = $#"
exit 0
Run Code Online (Sandbox Code Playgroud)
每个手册页(3.5.3 Shell参数扩展):
${#parameter}参数长度.参数值的字符长度被替换. 如果参数是
*或@,则替换的值是位置参数的数量. 如果parameter是由*或@下标的数组名,则替换的值是数组中元素的数量.
因此,这${#@}是一种特殊情况,因为它$#是表达位置参数数量的常用方法.