Linux bash:从字符串中读取文本,一次读取一个字符
我有一个脚本,每次读取一个字符的文件 这是我使用的脚本Linux bash:从字符串中读取文本,一次读取一个字符,linux,bash,file,variables,while-loop,Linux,Bash,File,Variables,While Loop,我有一个脚本,每次读取一个字符的文件 这是我使用的脚本 INPUT=/path/ while IFS= read -r -n1 char; do echo $char done < "$INPUT" INPUT=/path/ 而IFS=read-r-n1字符;做 echo$char 完成
INPUT=/path/
while IFS= read -r -n1 char; do
echo $char
done < "$INPUT"
INPUT=/path/
而IFS=read-r-n1字符;做
echo$char
完成<“$INPUT”
它工作得很好,只是我不知道如何将每个字符存储到变量中
我在找像这样的东西
N$X=$char
其中X=个字符的计数,$char=个字符
任何帮助都将不胜感激。谢谢 您可以这样做:
X=0
while IFS= read -r -n1 char; do
eval "N$X=\$char"
X=`expr $X + 1`
done < "$INPUT"
X=0
而IFS=read-r-n1字符;做
评估“N$X=\$char”
X=`expr$X+1`
完成<“$INPUT”
在循环结束时,
X0
、X1
、X2
等将包含已读入的各种字符。作为一个一般情况,具有诸如N1
、N2
等变量。。。在中并希望使用另一个变量像N$i
一样访问它们是非常糟糕的。解决办法在于阵列。以下是我将如何使用数组来解决您的问题:
n=()
i=0
while read -r -n1 n[i]; do
echo "Character $i is ${n[i]}"
((++i))
done < "$INPUT"
(请记住,数组索引从0开始)
另一种可能是把所有东西都塞进一个字符串中,简单如下:
string=$( < "$INPUT" )
(取从索引k
开始的长度为1的子字符串)。在所有字符上循环可以按以下方式完成:
for ((k=0;k<${#string};++k)); do
echo "Character $k is '${string:k:1}'"
done
用于((k=0;kYou不客气。但是如果它对您有效,请不要这样做。当输入文件包含空格时,这不会失败吗?@ruakh Nope。我检查了空格,结果很好。请注意,在计算实际赋值之前,eval中的$char
不会展开,因为在美元之前有一个反斜杠。@JamesHolderness:是的,我没有我忘记了,但是…哦,我明白了。我总是忘记在作业的右边是不会分词的。
${n:k:1}
for ((k=0;k<${#string};++k)); do
echo "Character $k is '${string:k:1}'"
done