如何提取bash shell程序输入字符串的长度?



中的代码如下
#! /bin/bash
file=$1
echo ${#$1}
echo ${#file}
length=${#file}

我在shell中的输入是test.sh

line 6: ${#$1}: bad substitution

那么我如何在bash shell程序中打印输入长度并将其作为变量赋值以供随后使用呢?

您看到的问题是,在$1=file行中,$1被展开为您的第一个参数,并且它作为命令运行。因此,如果您使用参数good运行脚本,bash将运行命令good=file,这是错误的。

解决方案显然是正确分配:

file=$1

同样,你的${#$1}得到了一些特殊字符。像${#file}一样,#后面的字符串是变量名,在参数的情况下只是一个数字,所以它应该是${#1}

一般来说,我发现带参数的复杂参数替换非常难以阅读(在算术表达式的情况下,它们当然是完全不可能的),所以我倾向于总是为它们分配适当命名的变量(所以我使用x=$1; echo ${x}而不是echo $1)

之后,你的脚本做它应该做的事情:

#! /bin/bash
file=$1
echo ${#1}
echo ${#file}
length=${#file}
echo "length: ${length}"

最新更新