【问题标题】:bash line concatenation during variable interpolation变量插值期间的bash行连接
【发布时间】:2011-03-27 14:45:11
【问题描述】:
$ cat isbndb.sample | wc -l
13
$ var=$(cat isbndb.sample); echo $var | wc -l
1

为什么将字符串分配给变量时缺少换行符?如何防止换行符转换为空格?

我正在使用 bash。

【问题讨论】:

    标签: string bash newline variable-assignment


    【解决方案1】:

    您必须引用变量以保留换行符。

    $ var=$(cat isbndb.sample); echo "$var" | wc -l
    

    cat 在这两种情况下都是不必要的:

    $ wc -l < isbndb.sample
    $ var=$(< isbndb.sample); echo "$var" | wc -l
    

    编辑:

    当 Bash 将文件的内容分配给变量时,它通常会从文件中删除额外的尾随换行符。你必须诉诸一些技巧来保护它们。试试这个:

    IFS='' read -d '' var < isbndb.sample; echo "$var" | wc -l
    

    IFS 设置为 null 可防止文件在换行符处拆分,并将 read 的分隔符设置为 null 使其接受文件直到文件结尾。

    【讨论】:

    • $var=$(cat isbndb.sample);回声“$var” |厕所-l。输出是 12,少了一行,为什么?我使用 cat 从文件中读取,因为在我的程序中它实际上是另一个 cmd 的输出。
    • 似乎我的最后一个空行被省略了。如何解决这个问题?谢谢
    【解决方案2】:
    var=($(< file))
    echo ${#var[@]}
    

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多