#! /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}"