Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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使用while read语法附加到变量_Bash_While Loop - Fatal编程技术网

Bash使用while read语法附加到变量

Bash使用while read语法附加到变量,bash,while-loop,Bash,While Loop,我有一个如下所示的文件: /usr/local/bin /bin /usr/bin /usr/local/sbin /usr/sbin /sbin /home/user/.local/bin /home/user/bin /home/user/perl5/bin $ tr -s '\n' ':' <file /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/.local/bin:/home/us

我有一个如下所示的文件:

/usr/local/bin
/bin
/usr/bin
/usr/local/sbin
/usr/sbin
/sbin
/home/user/.local/bin
/home/user/bin
/home/user/perl5/bin
$ tr -s '\n' ':' <file
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/.local/bin:/home/user/bin:/home/user/perl5/bin
现在我想使用while read语法通过冒号连接这些行,如下所示:

cat file | while read data; do path="$path:$data"; done && echo $path

但是上面的代码没有达到我预期的效果,$path变量仍然为空,有什么问题吗?

您可以通过以下操作获得此输出:

/usr/local/bin
/bin
/usr/bin
/usr/local/sbin
/usr/sbin
/sbin
/home/user/.local/bin
/home/user/bin
/home/user/perl5/bin
$ tr -s '\n' ':' <file
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/.local/bin:/home/user/bin:/home/user/perl5/bin

$tr-s'\n'':'我们不需要循环或外部命令

path=$(<file) && path=${path//$'\n'/:} && echo "$path"

path=$(可能是重复的,谢谢,我学习了一些关于管道和PIDs+1的循环语法。+0对于tr命令,它确实用冒号替换了所有的换行符,包括最后一个,它会生成一个不需要的尾随冒号(上面的输出中缺少)。