“eval TLEN = \ $ {#$ 1}”是什么意思?

时间:2014-01-27 06:40:38

标签: bash

上下文是:

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

我想它可能会用来找出1美元的长度。我不知道“\ $ {#$ 1}”的意思。 我很久以前就读过bash手册了,忘记了大部分内容,请解释一下$ {something}的含义,我可以隐约回想起那种符号是一种常见的模式。

好的,我在手册中找到了它。 “$ {#parameter}”响应计算长度。

2 个答案:

答案 0 :(得分:2)

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

如果您的代码被调用为脚本或函数f,如

f 2 qwe

将TLEN计算为3,因为它将采用第一个参数,它指向第二个参数,第二个参数的长度为3

答案 1 :(得分:0)

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

eval TLEN=\${#$1}

会扩展$1的值,大概是变量的名称。如果$1foo,则shell会将命令扩展为

eval TLEN=\${#foo}

删除引号后,实际评估的命令是

TLEN=${#foo}

因此TLEN设置为变量值的长度,该变量的名称为$1的值。