【问题标题】:Bash append to variable using while read syntaxBash 使用 while read 语法附加到变量
【发布时间】:2013-09-25 14:16:33
【问题描述】:

我的文件如下所示:

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

【问题讨论】:

标签: bash while-loop


【解决方案1】:

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

$ 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

【讨论】:

  • +1 表示循环语法。 +0 用于 tr 命令 - 它确实用冒号替换所有换行符,包括最后一个,这会产生不需要的尾随冒号(上述输出中缺少)。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2019-02-17
    • 2015-09-09
    相关资源
    最近更新 更多