shell 的here document 用法、輸入/輸出重定向

?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

?

什么是Here Document

Here Document 是在Linux Shell 中的一種特殊的重定向方式,它的基本的形式如下

cmd << delimiter
  Here Document Content
delimiter

它的作用就是將兩個?delimiter?之間的內容(Here Document Content?部分) 傳遞給cmd 作為輸入參數。

比如在終端中輸入cat << EOF?,系統會提示繼續進行輸入,輸入多行信息再輸入EOF,中間輸入的信息將會顯示在屏幕上。如下:

fish@mangos:~$ cat << EOF
> First Line
> Second Line
> Third Line EOF
> EOF
First Line
Second Line
Third Line EOF

注:?>這個符號是終端產生的提示輸入信息的標識符

這里要注意幾點

  1. EOF 只是一個標識而已,可以替換成任意的合法字符
  2. 作為結尾的delimiter一定要頂格寫,前面不能有任何字符
  3. 作為結尾的delimiter后面也不能有任何的字符(包括空格)
  4. 作為起始的delimiter前后的空格會被省略掉

Here Document 不僅可以在終端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件

cat << EOF > output.sh
echo "hello"
echo "world"
EOF

使用?sh here.sh?運行這個腳本文件,會得到output.sh 這個新文件,里面的內容如下

echo "hello"
echo "world"

?

實例

在命令行中通過 wc -l 命令計算 Here Document 的行數:

$ wc -l << EOF歡迎來到菜鳥教程www.runoob.com
EOF
3          # 輸出結果為 3 行
$-l << EOF歡迎來到菜鳥教程www.runoob.com
EOF
3          # 輸出結果為 3 行
$

我們也可以將 Here Document 用在腳本中,例如:

#!/bin/bash
# author:菜鳥教程
# url:www.runoob.comcat << EOF
歡迎來到
菜鳥教程
www.runoob.com
EOF
# author:菜鳥教程
# url:www.runoob.comcat << EOF
歡迎來到
菜鳥教程
www.runoob.com
EOF

執行以上腳本,輸出結果:

歡迎來到
菜鳥教程
www.runoob.com
菜鳥教程
www.runoob.com

/dev/null 文件

如果希望執行某個命令,但又不希望在屏幕上顯示輸出結果,那么可以將輸出重定向到 /dev/null:

$ command > /dev/null> /dev/null

/dev/null 是一個特殊的文件,寫入到它的內容都會被丟棄;如果嘗試從該文件讀取內容,那么什么也讀不到。但是 /dev/null 文件非常有用,將命令的輸出重定向到它,會起到"禁止輸出"的效果。

如果希望屏蔽 stdout 和 stderr,可以這樣寫:

$ command > /dev/null 2>&1> /dev/null 2>&1

注意:0 是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。

?

?

Here Document的變形

delimiter 與變量

在Here Document 的內容中,不僅可以包括普通的字符,還可以在里面使用變量,例如將上面的here.sh 改為

cat << EOF > output.sh
echo "This is output"
echo $1
EOF

使用sh here.sh HereDocument?運行腳本得到output.sh的內容

echo "This is output"
echo HereDocument

在這里?$1?被展開成為了腳本的參數?HereDocument

但是有時候不想展開這個變量怎么辦呢,可以通過在起始的 delimiter的前后添加?"?來實現,例如將上面的here.sh 改為

cat << "EOF" > output.sh  #注意引號
echo "This is output"
echo $1
EOF

得到的output.sh 的內容為

echo "This is output"
echo $1

? 變為 ?-

Here Document 還有一個用法就是將 '?' 變為 '?-'。 使用?<<-?的唯一變化就是Here Document 的內容部分每行前面的 tab (制表符)將會被刪除掉,這種用法是為了編寫Here Document的時候可以將內容部分進行縮進,方便閱讀代碼。


?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449989.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449989.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449989.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

beta第二天

團隊成員 鄭西坤 031602542 &#xff08;隊長&#xff09; 陳俊杰 031602504陳順興 031602505張勝男 031602540廖鈺萍 031602323雷光游 031602319吳志鴻 0316206341.昨天的困難 陳順興&#xff1a;無 廖鈺萍&#xff1a;無 吳志鴻&#xff1a;沒有 雷光游&#xff1a;無 鄭西坤…

void和void *

void f(void) { // 參數void可以省略cout << "aa"<<endl; } int t 22; int *a &t; void *p; // void *可以被賦值為其他類型 p a; cout << *(int *)p; // 使用的時候必須轉到那個類型 轉載于:https://www.cnblogs.com/pjishu/p/10343587.…

Android應用開發—Application

What is Application Application和Activity&#xff0c;Service一樣是android框架的一個系統組件&#xff0c;當android程序啟動時系統會創建一個application對象&#xff0c;用來存儲系統的一些信息。通常我們是不需要指定一個Application的&#xff0c;這時系統會自動幫我們…

C語言符號

C語言運算符的優先級 一、運算符的優先級表 C 語言的符號眾多&#xff0c;由這些符號又組合成了各種各樣的運算符。既然是運算符就一定有其特定的優先級&#xff0c;下表就是C 語言運算符的優先級表&#xff1a; 注&#xff1a;同一優先級的運算符&#xff0c;運算次序由結合…

手機按鍵中控運行思路的個人理解

目前而言基本的自己理解的中控多線程腳本無非就是兩種1.主代碼作為腳本功能的載體 另外開辟一個線程作為和中控保持聯系的部分(下面只是思路 無法直接運行)Import "zm.luae" zm.Init /* 該思路下的基本流程 從UI界面獲取到云賬號 和 本地的配置信息---->根據自己…

burp過期了,換一個

先從吾愛破解論壇下載工具&#xff1a;https://down.52pojie.cn/Tools/Network_Analyzer/Burp_Suite_Pro_v1.7.37_Loader_Keygen.zip 工具運行需要Java環境&#xff0c;請自行安裝&#xff0c;此處不贅述。解壓完后雙擊keygen 填一下License Text(隨意)&#xff0c;然后點擊Run…

加載一張圖片到ImageView到底占據多少內存

https://blog.csdn.net/BUG_delete/article/details/79557939 簡介 Android中經常要通過ImageView進行圖片資源顯示。在加載圖片時&#xff0c;首先要考慮的兩個因素就是體驗問題和性能問題。 其中&#xff0c;體驗問題是指圖片顯示的是否正確&#xff08;例如Universal-Imag…

mysql -u root -p 解釋

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 mysql -u 用戶名 -p 密碼 是連接數據庫服務器的命令。要求你輸入自己連接數據庫的用戶名和密碼。 考慮密碼如果直接明文寫在這條命令行…

hbase 概念

在hbase里面有幾個通俗的名稱會經常出現 1&#xff09;Hregion region 2&#xff09;Hregionserver regionserver 3&#xff09;Hmaster master 4&#xff09;Hmamstore memstore 5&#xff09;Hfile storeFile 1、什么是hbase&#xff1f; 1&#xff09;它是基于稀疏的、…

beta沖刺第三天

團隊成員 鄭西坤 031602542 &#xff08;隊長&#xff09; 陳俊杰 031602504陳順興 031602505張勝男 031602540廖鈺萍 031602323雷光游 031602319吳志鴻 0316206341.昨天的困難 陳順興&#xff1a;理解別人的代碼 廖鈺萍&#xff1a; 吳志鴻&#xff1a;無 雷光游&#xff1a; …

多線程詳解

1. 進程與線程有那些區別和聯系&#xff1f;   每個進程至少需要一個線程。 進程由兩部分構成&#xff1a;進程內核對象&#xff0c;地址空間。線程也由兩部分組成&#xff1a;線程內核對象&#xff0c;操作系統用它來對線程實施管理。線程堆棧&#xff0c;用于維…

AirPods的自動連接配對原理

首次連接 打開裝有 AirPods 的充電盒&#xff0c;并將它放在 iPhone 旁邊。此時你的 iPhone 上將出現設置動畫。輕點「連接」&#xff0c;然后輕點「完成」。 就這么簡單&#xff0c;而且會自動設置&#xff0c;實現與已使用同一 Apple ID 登錄 iCloud 的任一支持設備搭配使用…

Linux chmod命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux/Unix 的文件調用權限分為三級 : 文件擁有者、群組、其他。利用 chmod 可以藉以控制文件如何被他人所調用。 使用權限 : 所有使用…

模塊化

我那進了"模塊化研究"小組.所以嘞.研究模塊化以及如何讓項目的模塊化更加合理和高效是我們小組的主要目的.首先&#xff0c;在實行模塊化之前,得先鞏固模塊化開發的理論基礎,因為理論是實踐的基礎。只有這樣&#xff0c;在過程中理論與實踐相結合,才有可能達到最滿意…

1566:基礎練習 十六進制轉八進制

題目地址&#xff1a;https://acmore.cc/problem/LOCAL/1566 1 #include <iostream>2 #include <string>3 4 using namespace std;5 6 string HexToBin(string s) //16進制轉2進制7 {8 string str "";9 for (int i 0; i < s.size(); i) 10…

利用fastjson對json轉map的操作

String str "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}"; //第一種方式 Map maps (Map)JSON.parse(str); System.out.println("這個是用J…

推薦書籍

五百本編程書籍推薦【信息化類】 書號書名作者出版時間定價對應頁碼TP02041企業資源計劃&#xff08;ERP&#xff09;教程羅鴻2006-1&#xffe5;28.00—TP02031ERP理論、方法與實踐周玉清 等2005-12&#xffe5;39.00—TP01059ERP原理設計實施&#xff08;第3版&#xff09;羅…

Linux diffstat命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux diffstat命令根據diff的比較結果&#xff0c;顯示統計數字。 diffstat讀取diff的輸出結果&#xff0c;然后統計各文件的插入&…

java命令--jmap命令使用(查找內存泄漏對象)

轉自&#xff1a;https://www.cnblogs.com/kongzhongqijing/articles/3621163.html jdk安裝后會自帶一些小工具&#xff0c;jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java進程(或核心文件、遠程調試服務器)的共享對象內存映射或堆內存細節。 jmap命令可以獲得運行…

tr069相關協議說明

截圖自easycwmp官網&#xff1a;http://easycwmp.org/轉載于:https://www.cnblogs.com/kiss-passion/p/10362029.html