1.13 将命令序列的输出读入变量

《Linux Shell 脚本攻略(第 2 版)》读书笔记

  1. 用管道组合两个命令

    ls | cat -n > out.txt
    

    ls 的输出(stdout)被传递给 cat -n,后者将通过 stdin 所接收到的输入内容加上行号,然后输出重定向到文件 out.txt。

  2. 读取由管道相连的命令序列输出

    • 子shell方式

      out=$(ls | cat -n)
      
    • 反引用方式

      out=`ls | cat -n`
      
  3. 利用子 shell 生成一个独立进程

    子shell本身就是一个独立的进程。可以利用 () 操作符来定义一个子shell:

    pwd
    (cd /bin; ls)
    pwd
    

    可以看到,前后两次打印的当前路工作目录是一致的,子shell中执行cd命令没有影响到当前shell进程。

  4. 通过引用子 shell 的方式保留空格和换行符

    可以将命令放入双引号中,以保留空格和换行符(\n)。

    out="$(cat text.txt)"

    以上书中所说的方式没有起作用!

    为什么呢?让我们先来看一看1.16 字段分隔符和迭代器
    中关于 IFS 的介绍。

    分析out="$(cat text.txt)"

    我们单独执行 cat text.txt 命令输出正常,但赋值给 out 之后值就变成一行了。我猜测应该是在赋值的时候bash对文本进行了处理——以 IFS 中的字符列表作为分隔符,将内容分割之后再用 IFS 中的第一个分隔符进行拼接,然后赋值给 out

你可能感兴趣的:(1.13 将命令序列的输出读入变量)