“eval TLEN=\${#$1}” 的意思是什么?(涉及IT技术)

3

上下文是:

eval TLEN=\${#$1}
if [ $TLEN -gt 35 ]
then
  ...
fi

我猜它可能用于找出$1的长度。我不知道“\${#$1}”是什么意思。 我很久以前读过Bash手册,现在大部分都忘了,请解释一下 ${something} 表示什么,我能模糊地记得这种符号是一种常见的模式。

好的,我在手册中找到了答案。“${#parameter}”用于计数长度。


1
$1 - 是传递给您的Bash脚本的第一个参数。 - Alex Kapustin
我知道,但还是谢谢。 - Rui
2个回答

2

代码中的 eval TLEN=\${#$1} 表示:获取第一个参数 ($1),从中读取另一个参数的数字,并计算该另一个参数的长度。

如果您的代码被称为脚本或函数 f,如下所示:

f 2 qwe

它将计算TLEN为3,因为它将获取第一个参数,指向第二个参数,并且第二个参数的长度为3。

表达式中哪一部分负责计算长度? - Rui

0

因为eval是一个命令,它的参数首先会经历各种扩展,包括参数扩展。因此,

eval TLEN=\${#$1}

将扩展$1的值,这里假设$1是一个变量名。如果$1foo,那么shell会将命令扩展为

eval TLEN=\${#foo}

在删除引号后,实际被评估的命令是:
TLEN=${#foo}

所以TLEN被设置为变量名称为$1的值的长度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接