亚游wwwag8com
你好,游客 登录 注册
背景:
阅读新闻

Linux命令技巧分享:Bash Heredoc 使用示例

[日期:2019-05-15] 来源:Linux公社  作者:醉落红尘 [字体: ]

亚游wwwag8com,文章指出,回望2016年的世界经济,许多新变化前所未有,频飞的“黑天鹅”出人意料。总的来看,经济全球化进入了阶段性调整期,世界经济处于弱增长态势,国际秩序主导权角逐更趋激烈,全球格局出现由“多极化”步入“多层化”的明显迹象。

前不久,已经有60多年历史、号称台湾第一家民营航空公司的复兴航空,突然无预警宣布解散。围观群众还没从错愕中转过神儿来,已经有两种声音打起了嘴仗。国民党文传会副主委洪孟楷说,复兴关门是受蔡英文上台后大陆游客缩减的冲击,两岸航线占复兴营收四成多,这是“压垮骆驼的最后一根稻草”。民进党“立委”王定宇反驳说:复兴航空曾有两次空难,才是造成载客率大幅下滑的原因,跟陆客无关。 云南越狱涉毒犯张林苍被判无期 曾当庭自称杀警  新华社北京11月2日电 (记者许栋诚)外交部发言人洪磊2日在例行记者会上表示,中国海监船在钓鱼岛领海的巡航是行使管辖权的正常公务活动。

编写shell脚本时,您可能需要将多行文本或代码块传递给交互式命令,例如tee,cat或sftp。在Bash和其他类似Zsh的shell中,Here document(Heredoc)是一种重定向,允许您将多行输入传递给命令。

Bash Heredoc 使用示例

编写HereDoc的语法采用以下形式:

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER

  • 第一行以可选命令开头,后跟特殊重定向运算符<<和分隔标识符。
    • 您可以使用任何字符串作为分隔标识符,最常用的是EOF或END。
    • 如果分隔标识符未加引号,则在将here-document行传递给命令之前,shell将替换所有变量,命令和特殊字符。
    • 将减号添加到重定向运算符<<  - 将导致忽略所有前导制表符。 这允许您在此处写入时使用缩进 -  shell脚本中的文档。 不允许使用前导空白字符,只允许使用制表符。
    • here-document块可以包含字符串,变量,命令和任何其他类型的输入。
  • 最后一行以分隔标识符结束。分隔符前的空白是不允许的。

基本的Heredoc例子

在本节中,我们将介绍如何使用heredoc的一些基本示例。

Heredoc最常与cat命令结合使用。

在下面的示例中,我们使用here document将包含环境变量和命令的两行文本传递给cat。

linuxidc@linuxidc:~/linuxidc.com$ cat << EOF
> 当前的工作目录是: $PWD
> 您登录的身份为: $(whoami)
> EOF

从下图的输出中可以看出,变量和命令都被替换:

当前的工作目录是: /home/linuxidc/linuxidc.com
您登录的身份为: linuxidc

Bash Heredoc 使用示例

让我们看看如果我们将分隔符用单引号或双引号括起来会发生什么。

linuxidc@linuxidc:~/linuxidc.com$ cat <<- "EOF"
> 当前的工作目录是: $PWD
> 您登录的身份为: $(whoami)
> EOF

您可以注意到,当引用分隔符时,shell不会执行参数扩展和命令替换。

当前的工作目录是: $PWD
您登录的身份为: $(whoami)

Bash Heredoc 使用示例

如果在语句或循环中使用heredoc,请使用<<- 重定向操作,允许您缩进代码。

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi

输出:

Line with a leading tab.

您可以使用>,>>运算符将其重定向到文件,而不是在屏幕上显示输出。

cat << EOF > linuxidc.txt
当前的工作目录是: $PWD
您登录的身份为: $(whoami)
EOF

如果linuxidc.txt不存在,则会创建它。 使用时>文件将被覆盖,而>>将输出附加到文件。(如下图)

Bash Heredoc 使用示例

还可以通过管道输入heredoc。在下面的例子中,sed命令将用m替换所有i字符的实例:

linuxidc@linuxidc:~/linuxidc.com$ cat <<'EOF' |  sed 's/i/m/g'
> idc
> linuxmi
> EOF

输出如下:

mdc
lmnuxmm

Bash Heredoc 使用示例

要将管道数据写入文件:

linuxidc@linuxidc:~/linuxidc.com$ cat <<'EOF' |  sed 's/i/m/g' > linuxidc.txt
> idc
> linuxmi
> EOF

使用Heredoc和SSH

使用Heredoc是通过SSH在远程系统上执行多个命令的最方便和最简单的方法之一。

使用不带引号的分隔符时,请确保转义所有变量、命令和特殊字符,否则将在本地插入这些变量、命令和特殊字符。

ssh -T user@host.com << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF

输出:

The current local working directory is: /home/linuxidc
The current remote working directory is: /home/user

您可能还需要设置基于SSH密钥的身份验证并连接到Linux服务器而无需输入密码。

总结

在本指南中,您已经了解了什么是heredoc以及如何在shell脚本中使用它。

更多Linux命令相关信息见Linux命令大全 专题页面 /wwwd35clinuxidcd35ccom/topicnews.aspx?tid=16

Linux公社的RSS地址/wwwd35clinuxidcd35ccom/rssFeed.aspx

本文永久更新链接地址/wwwd35clinuxidcd35ccom/Linux/2019-05/158679.htm

linux
相关资讯       Bash Heredoc  Heredoc 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
印尼东部发生6.1级地震 震源深度为111公里 韩方回应老挝溃坝:尚无韩侨民伤亡 已展开救援 德国火车站发生持刀砍人案 媒体质疑系IS所为 特朗普称关税将会很公平 点名批德国占美国便宜 中国拟对美大豆加征25%关税 美豆农广告喊话特朗普 汶川地震十周年 这是最好的纪念 人民日报:脱贫攻坚离不开一个“实”字 牛汇:美元狂欢引爆黄金崩盘 金价急跌25美元失守千三 签下长约詹皇仍能左右自由市场 2019年还看他 姑娘为躲催婚春节天天在家用手机做这事 结果惨了 日元多头瞄准100关口 土地交易丑闻为涨势提供助力 继新加坡和马来西亚后 菲律宾也要调查Uber-Grab…
继迪拜、洛杉矶后 Uber再选飞行出租国际城市 股指走势明显分化创业板将受到青睐 权敬源赛后遇车杜里不好意思 对方戴帽感觉很不好 马尔代夫驻华大使造访国乒 与丁宁刘诗雯互动 迄今为止美国对华实施6次“301调查” 山西打掉11人盗墓恶势力团伙 盗掘贩卖文物523件 苹果三星专利侵权案再起波澜:苹果寻求10亿美元赔偿 2岁女童剧烈呕吐还喷鼻血 因在幼儿园被撞被敲头 环保部:年底前完成环评“未批先建”项目清理 原油期货周一收高 延续上周涨势 聚焦监察法草案:留置调查措施不是刑事强制措施 万人调查羽生结弦获得MVP 三项排名均列榜首
1岁宝宝在医院看病 被陌生男子冲过来狠打一巴掌 马来西亚查出“大老虎”?前总理私宅搜出现金16亿 报告显示:2017年全球流离失所人数近1200万 博彩短信调查:iMessage地下广告业务已发展成产业… 快讯:港股恒指低开0.47% 保险股领跌蓝筹 西南新贵留下昔日榜眼 他配第一大前球队全胜 如何更好地保护消费者?国家工商总局局长这样说 陆慧明竞彩:萨尔茨堡不败 里斯本全包盼冷 罕见 北京书记市长一个月四次离京(图) 参赛形势为历年最严峻 中国军团平昌之路不好走 美密苏里州高速发生多起交通事故 至少1死11伤 中国游客赴迪拜旅游 中领馆:谨慎参与潜水项目 女排转会精彩纷呈 球迷:可以临时签下郎平吗? 亚游wwwag8com