欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Linux培訓(xùn)簡(jiǎn)述shell循環(huán)中變量的作用域問題

2018-11-29 17:02:03 1210瀏覽

最近幾日有小伙伴通過扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)詢問老師一些關(guān)于Linux開發(fā)的技術(shù)性問題,小編整理了一個(gè)分享給大家,下面我們就一起來看下shell循環(huán)中變量的作用域問題吧。



扣丁學(xué)堂Linux培訓(xùn)簡(jiǎn)述shell循環(huán)中變量的作用域問題



實(shí)現(xiàn)一個(gè)shell腳本,功能簡(jiǎn)單來說就是從文件中按行讀取然后將所有行拼接成一行寫入一個(gè)文件,關(guān)鍵代碼如下:


path_all=""
cat $1 | while read line
do
 if [ "$path_all" == "" ];then
 path_all=$line
 else
 path_all=$path_all,$line
 fi
done
echo $path_all > $one_file


結(jié)果執(zhí)行結(jié)果竟然是空!按照常理shell中的變量默認(rèn)是全局變量,不會(huì)存在變量作用域的問題,于是上網(wǎng)查了下,發(fā)現(xiàn)問題出在while上。



while循環(huán)讀取文件中內(nèi)容有兩種寫法,一種是管道符,一種是重定向,寫法如下:


管道符:


cat $file_name | while read line
do
 #deal with line
done


重定向:


while read line
do
 #deal with line
done < $file_name


這兩種做法的區(qū)別在于,重定向是內(nèi)建命令,而管道符是非內(nèi)建命令,之所以寫的腳本出現(xiàn)了輸出是空的問題,原因就在這里。


linux執(zhí)行shell時(shí),會(huì)創(chuàng)建“子shell”運(yùn)行shell中的命令,當(dāng)運(yùn)行到非內(nèi)建指令時(shí),會(huì)創(chuàng)建“孫shell”運(yùn)行非內(nèi)建指令。


變量的作用于在每個(gè)shell中有效,所以,非內(nèi)建指令中定義的這些變量就只能在孫shell運(yùn)行,而在子shell中不生效,所以,即便我在while中給path_all賦值了,子shell中也不會(huì)獲取到這個(gè)值。



解決這個(gè)問題的辦法有兩種,如下:


如果不是必須使用管道符的方式寫while循環(huán),可以用重定向的寫法,這種寫法循環(huán)內(nèi)的變量在子shell中是生效的,比較簡(jiǎn)便。


如果非要使用管道符的方式,可以創(chuàng)建臨時(shí)文件,用于存放孫shell中的輸出:


cat $file_name | while read line
do
 echo $line >> $tmp_file
done
cat $tmp_file >$one_file


雖然兩種方法都可以解決這個(gè)問題,但還是推薦第一種解決方法。




想要了解更多關(guān)于Linux開發(fā)方面內(nèi)容的小伙伴,請(qǐng)關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Linux開發(fā)視頻教程,Linux培訓(xùn)后的前景無(wú)限,行業(yè)薪資和未來的發(fā)展會(huì)越來越好的,扣丁學(xué)堂老師精心推出的Linux視頻直播課定能讓你快速掌握Linux從入門到精通開發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:422345477。


扣丁學(xué)堂微信公眾號(hào)


【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】



查看更多關(guān)于“Linux培訓(xùn)資訊”的相關(guān)文章>>



標(biāo)簽: linux系統(tǒng)入門學(xué)習(xí) linux培訓(xùn) linux視頻教程 linux基礎(chǔ)教程 linux在線視頻 linux在線學(xué)習(xí) linux從入門到精通 linux開發(fā)環(huán)境包 linux系統(tǒng) linux開發(fā)教程

熱門專區(qū)

暫無(wú)熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部