2

我有如下文件:

/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 变量仍然是空的,有什么问题?

4

2 回答 2

2

您可以通过以下方式获得此输出:

$ 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 data
do
   ... things ...
done < file
于 2013-09-23T12:38:03.437 回答
1

我们不需要循环或外部命令。

path=$(<file) && path=${path//$'\n'/:} && echo "$path"
于 2013-09-25T06:16:33.970 回答