Ohai, 得到了另一个Bash问题。
for i in ${#input}; do echo ${input:$i:1}; done
在交互式bash中工作,但不在shell脚本中工作。输入是一个基于参数的变量。它设置得当。 有什么想法吗?
答案 0 :(得分:3)
不确定它在交互式shell中是如何工作的,这个表达式:
${#input}
input
是数组变量,input
变量编辑
我认为您正在尝试执行此代码:
for ((i=0; i<${#input}; i++))
do
echo ${input:$i:1}
done
此代码将针对输入字符串中的每个字符进行迭代,然后回显每个字符。
答案 1 :(得分:2)
我无法看到这段代码的目的 - 它相当于一个echo
。
说明:
${#input}
是input
变量内容的长度。 总是一个数字,因此循环总是 然后修改$i
以包含该可变长度。
然后${input:$i:1}
表示“input
变量中的1个字符,从偏移量$i
开始,等于变量的长度,因此超过其结束。即${input:$i:1}
始终是一个空字符串。因此您的代码可以简化为:
echo
例如,如果$input
为foobar
,则${#input}
为6
,您的循环执行一次此命令:{{ 1}}。此处的偏移量从零开始,因此echo ${input:6:1}
刚好超过6
的最后一个字符。如果您尝试获取变量的最后一个字符,请尝试以下操作:
$input
你究竟想做什么?