shell的<, <<, <<&l

作者: CodingCode | 来源:发表于2018-10-07 12:04 被阅读3次

shell的<, <<, <<<操作符

我们先看一个例子

定义一个文本文件:

$ cat a.txt
AABBCC in file a.txt

使用sed命令操作文本文件:

$ cat t.sh
#!/bin/bash

sed -e "s/BB//" a.txt
sed -e "s/BB//" < a.txt
sed -e "s/BB//" << a.txt
AABBCC in inline file a.txt
a.txt
sed -e "s/BB//" <<< "AABBCC in variable"

运行结果:

$ ./t.sh
AACC in file a.txt
AACC in file a.txt
AACC in inline file a.txt
AACC in variable

分析

在t.sh里面调用了4次sed命令,每次命令的最后一个参数不一样。

  1. a.txt
    以文件a.txt作为sed的输入。

  2. < a.txt
    以stdin作为sed的输入,stdin输入的内容从a.txt里面获取。

  3. <<a.txt
    以stdin作为sed的输入,stdin输入的内容从脚本内<<a.txt和a.txt之间的inline内容获取。

  4. <<< "AABBCC in variable"
    以stdin作为sed的输入,stdin的内容就是<<<后面的字符串内容。

命令1和命令2,3,4不同之处是命令1以指定文件作为输入,而命令2,3,4以标准输入stdin作为输入内容。

至于一个命令是从标准输入stdin获取输入,还是从输入文件获取输入,还是从命令行获取输入,这是由命令工具本身决定的。我们还是以sed为例,假如sed命令同时从文件和标准输入文件stdin都提供了输入,那么sed会怎么处理呢?

$ cat a.txt
AABBCC in file a.txt
$ cat b.txt
AABBCC in file b.txt
$ sed -e "s/BB//" a.txt < b.txt
AACC in file a.txt
$ sed -e "s/BB//" b.txt < a.txt
AACC in file b.txt

看明白了吗,如果同时提供两种输入,sed使用输入文件作为输入的,这是sed命令本身的处理逻辑,大致如下:

if 有输入文件; then
   处理输入文件内容
else if 标准stdin有数据; then
   处理stdin文件内容
else
   报错啥的
fi

最后提到前面的命令2,3,4处理stdin的不同方式,这些都是调用者shell处理的,不是sed命令处理的,即sed的调用这把这些数据都分析整理好,然后丢给sed的标准输入文档stdin,然后sed就读取stdin就可以了。

结论就是

  1. "< VAR"
    VAR标识的是一个文件名,从所标识的文件读取内容,传递给命令的stdin。
  2. "<< VAR"
    VAR是一个标记,从当前脚本的inline读取内容,一直到再次遇到VAR标识符为止,传递给命令的stdin。
  3. <<< VAR
    VAR是一个变量,直接读取变量的内容,传递给命令的stdin。

具体能不能用<<<操作符,还依赖于待调用的命令本身,其是否支持从stdin读取数据。

相关文章

  • Read a story

    This is a lion. lt's big. lt's strong. lt has big teeth. ...

  • Mybatis中特殊符号转移

    1. 写法1 原符号替换符号<<<=<=>>>=>=<><>&&'&a...

  • Read a story

    lt's hot?? lt's cool here. lt's a hat. What's this? Do yo...

  • 芯科通信招聘fw固件工程师

    职责描述 工作职责:lt;/pgt;lt;pgt;1、负责光模块firmware的软件设计、维护以及优化;lt;/...

  • test

    <script>alert(1);</script>

  • 无标题文章

    <script>alert('hello’);</script>

  • 打卡第47天

    Attention is vitality. lt connects you with others. lt ma...

  • Listen and enjoy

    lt can be bitter. lt can be sweet. Sometimes it's black. ...

  • 2018-10-08

    线性系统的LT分析法一、数学角度1、对微分方程进行LT分析eg:同求LT变换得到2、对电路进行LT处理对于线性电路...

  • 2018-06-08

    LT studio :不忘初心 ,方得始终 关于LT创办,LHS和TYY走过了九年。经历九年,LT终于共创业。九年...

网友评论

    本文标题:shell的<, <<, <<&l

    本文链接:https://www.haomeiwen.com/subject/adclaftx.html