2013-06-30 127 views
1

我有一个剧本的时候 这读取文件的字符是我使用的脚本庆典:每次从一个字符串一个字符阅读文本

INPUT=/path/ 
while IFS= read -r -n1 char; do 
    echo $char 
done < "$INPUT" 

它工作正常,只是我找不到了如何每个字符存储到一个变量 即时寻找类似

N$X=$char

其中X =计数或字符和$字符=字符

任何帮助,将不胜感激。谢谢!

回答

1

你可以做这样的事情:

X=0 
while IFS= read -r -n1 char; do 
    eval "N$X=\$char" 
    X=`expr $X + 1` 
done < "$INPUT" 

在循环结束时,X0X1X2等将包含在已被读取的各种人物

+0

这个作品我想要的方式来 非常感谢你 –

+0

不客气。但请[接受我的回答](http://stackoverflow.com/help/someone-answers)如果它适合你。 –

+0

只要输入文件包含空格,这不会失败吗? – ruakh

2

作为。一般的事情,有像N1,N2N2等变量,并希望能够访问他们像N$ii另一个变量是非常糟糕的。对此的解决方案在阵列中。下面是我将如何使用数组,而不是解决问题:

n=() 
i=0 
while read -r -n1 n[i]; do 
    echo "Character $i is ${n[i]}" 
    ((++i)) 
done < "$INPUT" 

在这一点上,你有你的字符数组n(当然不是全部,他们)英寸你可以有

${n[k]} 

(记住,数组索引从0开始)访问字符k+1


另一种可能性是在一个字符串发出声音的一切,它是像这样简单:

string=$(< "$INPUT") 

,你可以有

${n:k:1} 

访问字符k+1(取子长度1从索引k开始)。循环上的所有字符可以做的是:

for ((k=0;k<${#string};++k)); do 
    echo "Character $k is '${string:k:1}'" 
done 
相关问题