Bash `当IFS=read-r`仍然不保留空白时?
我试图在while循环迭代期间保留输入文件中的所有空白。以下是我正在使用的文件(文件1): 如您所见,我在每行的字符之间放置了制表符。我想把这些标签放在输出上。我尝试过在while循环中清除IFS,如下所示:Bash `当IFS=read-r`仍然不保留空白时?,bash,Bash,我试图在while循环迭代期间保留输入文件中的所有空白。以下是我正在使用的文件(文件1): 如您所见,我在每行的字符之间放置了制表符。我想把这些标签放在输出上。我尝试过在while循环中清除IFS,如下所示: while IFS= read -r p; do echo $p done < <(cat file1) 但是,当我在while循环之外清除IFS时,它可以完美地工作: IFS='' while read -r p; do echo $p done <
while IFS= read -r p; do
echo $p
done < <(cat file1)
但是,当我在while循环之外清除IFS时,它可以完美地工作:
IFS=''
while read -r p; do
echo $p
done < <(cat file1)
为什么当我在while循环的同一行中清除IFS时,选项卡无法保留?只需引用您的变量:
while IFS= read -r p; do
echo "$p";
done < file1
而IFS=read-rp;做
回声“$p”;
完成<文件1
请注意,您也不需要使用
cat
只需引用您的变量:
while IFS= read -r p; do
echo "$p";
done < file1
而IFS=read-rp;做
回声“$p”;
完成<文件1
请注意,您也不需要使用
cat
啊。非常感谢。成功了。我知道事情会非常简单。我应该总是引用我的变量吗?@orbit-是的!!!你必须总是引用你的变量,除非你有一个非常具体的原因不知道结果是什么。@这将是有帮助的@如果您希望它是任何命令的一个参数,而不是在空白处拆分,那么您应该引用它。始终引用。如果不引用,echo$p
将变成echo 01:abc
,这在功能上等同于echo 01:abc
。将echo
的IFS
设置为null(空字符串)也无法修复它,因为echo
仍然接收4个参数:“01:”、“a”、“b”和“c”。通过使用引号,您可以将其更改为单个参数,因此echo
将以100%字符为character.Ugh打印该单个参数。非常感谢。成功了。我知道事情会非常简单。我应该总是引用我的变量吗?@orbit-是的!!!你必须总是引用你的变量,除非你有一个非常具体的原因不知道结果是什么。@这将是有帮助的@如果您希望它是任何命令的一个参数,而不是在空白处拆分,那么您应该引用它。始终引用。如果不引用,echo$p
将变成echo 01:abc
,这在功能上等同于echo 01:abc
。将echo
的IFS
设置为null(空字符串)也无法修复它,因为echo
仍然接收4个参数:“01:”、“a”、“b”和“c”。通过使用引号,您可以将其更改为单个参数,因此echo
将以100%的字符对字符打印单个参数。为什么要使用<。我对进程重定向的了解比我对stdin文件重定向的了解要晚得多你为什么用<有趣。我对进程重定向的了解比我对stdin文件重定向的了解要晚得多D
a@ubuntu:~$ sudo bash a.sh
01: a b c
02: d e f
while IFS= read -r p; do
echo "$p";
done < file1