日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

引言

為什么要數(shù)量掌握bash編程,因為它是linux下的默認工具。任何時候與系統(tǒng)內(nèi)核對話,我們都直接面對shell。操作系統(tǒng)提供了為數(shù)眾多的便利工具,用于完成復雜的操作。

今天我們說一個最為常用的輸出字符串的指令 echo。

為什么說這個最常用的指令呢?因為很多人每天都在用。卻在使用過程中遇到了大大小小許許多多的坑而不可避免。今天我們通過一個問題,給出解決方案。帶領(lǐng)讀者深入的了解一下bash內(nèi)層的原理對echo的影響。

都Linux的老司機了,連個echo都用不好,大概火候差在這

 

問題的提出

假如我們有一個文本文件 coder.txt,內(nèi)容如下:

Twinkle, twinkle, little star,
How I wonder what you are.

然后我們使用 cat 逐行打印這個文件,在終端中執(zhí)行以下指令:

cat coder.txt

輸出效果:

都Linux的老司機了,連個echo都用不好,大概火候差在這

 

那么現(xiàn)在有一個需求,假如需要對每行文本做進一步的處理,在bash中使用for循環(huán)逐行處理。我們先這樣寫:

for f in `cat coder.txt`; do echo $f; done

我們預期會像cat指令一樣輸出兩行文本,但實際上不是這樣的。下面是輸出的情況:

都Linux的老司機了,連個echo都用不好,大概火候差在這

 

可以注意到。每行文本中間有空格的地方,在打印的時候都會另起一行。

有沒有什么解決方案呢?

有人說你只需要在變量外層加上雙引號,就可以作為一行字符串處理了。事實會是這樣的嗎?我們測試一下。

都Linux的老司機了,連個echo都用不好,大概火候差在這

 

可以看到雙引號對變量不起任何作用。

那么還有的同學,經(jīng)過參考man page之后,覺得應該給echo指令加上一些選項。比如下面這樣:

都Linux的老司機了,連個echo都用不好,大概火候差在這

 

我們分別測試了 -e 選項,和 -ne 選項,發(fā)現(xiàn)都不行。

原理

之所以會產(chǎn)生上面的疑惑,根源還在于對bash腳本的一些固有解析方式原理的不夠了解。

下面我們直接給出解決方案。然后,分析為什么會起作用?

IFS=$'n'
for i in `cat coder.txt`; do echo "$i"; done
unset IFS

下面是運行效果:

都Linux的老司機了,連個echo都用不好,大概火候差在這

 

可以注意到,本質(zhì)上循環(huán)打印沒有改變,只是在執(zhí)行前后對常量 IFS 進行了人為指定。

原來,bash循環(huán)默認使用空格作為分隔的依據(jù)

我們只用手動指定 “n”換行符為分隔的依據(jù),就順利地原樣輸出了。

 

寫在最后

“書讀百遍,其義自見”!

多敲打,多參考 man page,可以讓基本功逐日增強。

HAppy coding :_)

分享到:
標簽:Linux echo
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定