Bash命令在交互式shell中工作,但不在脚本中工作

时间:2011-06-14 16:08:15

标签: linux bash

Ohai, 得到了另一个Bash问题。

for i in ${#input}; do echo ${input:$i:1}; done

在交互式bash中工作,但不在shell脚本中工作。输入是一个基于参数的变量。它设置得当。 有什么想法吗?

2 个答案:

答案 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

例如,如果$inputfoobar,则${#input}6,您的循环执行一次此命令:{{ 1}}。此处的偏移量从零开始,因此echo ${input:6:1}刚好超过6的最后一个字符。如果您尝试获取变量的最后一个字符,请尝试以下操作:

$input

你究竟想做什么?