主頁 > 知識庫 > 淺談shell循環(huán)中變量的作用域問題

淺談shell循環(huán)中變量的作用域問題

熱門標(biāo)簽:汨羅代理外呼系統(tǒng) 貴陽400電話到哪里去辦理 天津智能外呼系統(tǒng)排名 宿松高德地圖標(biāo)注 申請400電話有什么用 網(wǎng)絡(luò)電話外呼系統(tǒng)撥號軟件 4層電梯外呼控制系統(tǒng)設(shè)計 400電話申請找 電銷機(jī)器人加盟多少錢

最近實(shí)現(xiàn)了一個shell腳本,功能簡單來說就是從文件中按行讀取然后將所有行拼接成一行寫入一個文件,關(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)是全局變量,不會存在變量作用域的問題,于是上網(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時,會創(chuàng)建“子shell”運(yùn)行shell中的命令,當(dāng)運(yùn)行到非內(nèi)建指令時,會創(chuàng)建“孫shell”運(yùn)行非內(nèi)建指令

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

解決這個問題的辦法有兩種,如下

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

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

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

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

以上這篇淺談shell循環(huán)中變量的作用域問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • linux中shell的變量的數(shù)值計算
  • Shell編程之特殊變量和擴(kuò)展變量詳解
  • Shell編程之變量數(shù)值計算方法示例
  • linux shell腳本對未定義變量的判斷以及if的用法詳解
  • shell for循環(huán)、循環(huán)變量值付給其他shell腳本的方法
  • 詳解Shell編程之變量數(shù)值計算(二)
  • shell判斷一個變量是否為空方法總結(jié)

標(biāo)簽:海北 連云港 廣東 昌都 臨沂 贛州 烏蘭察布 撫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談shell循環(huán)中變量的作用域問題》,本文關(guān)鍵詞  淺談,shell,循環(huán),中,變量,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談shell循環(huán)中變量的作用域問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺談shell循環(huán)中變量的作用域問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章