Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash:从字符串中读取文本,一次读取一个字符_Linux_Bash_File_Variables_While Loop - Fatal编程技术网

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