文件输入.txt包含:
*
*
*
H
E
L
L
O
W
O
R
L
D
*
*
*
我的代码逐行读取每个字符:
while read -n1 c; do
dest+="${c}"
done < input.txt
echo $dest
结果是:
***HELLOWORLD***
我要这个:
*** 你好世界 ***
答案1
我假设您使用 bash shell 是因为该-n1
选项,它不是 POSIXsh
标准的一部分。
如果删除-n1
,则只会在非空行上read
为 赋值。然后,您可以使用以下形式的参数扩展c
${parameter:-word}
Use Default Values. If parameter is unset or null, the expan‐
sion of word is substituted. Otherwise, the value of parameter
is substituted.
Space当c
为空时分配默认值。因此
#!/bin/bash
while read c; do
dest+=${c:- }
done < input.txt
echo "$dest"
请注意,变量扩展不需要在赋值的 RHS 上加引号 - 但应该在命令中加引号echo
,否则$dest
将受到 shell 的分词和文件名生成(“通配符”)的影响 - 当变量可能包含*
字符时尤其重要。
然后给出
$ cat input.txt
*
*
*
H
E
L
L
O
W
O
R
L
D
*
*
*
你应该得到
$ ./myscript
*** HELLO WORLD ***
答案2
$ paste -sd "" < input.txt
*** H E L L O WORLD ***
我剪切粘贴的您问题中的示例文本中有一些多余的空格。