Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Bash `当IFS=read-r`仍然不保留空白时?_Bash - Fatal编程技术网

Bash `当IFS=read-r`仍然不保留空白时?

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循环迭代期间保留输入文件中的所有空白。以下是我正在使用的文件(文件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 < <(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