最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年06月20日 15:19:14   作者:ChaosV_Ls  
今天小編就為大家分享一篇淺談shell循環(huán)中變量的作用域問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近實(shí)現(xiàn)了一個(gè)shell腳本,功能簡(jiǎn)單來(lái)說(shuō)就是從文件中按行讀取然后將所有行拼接成一行寫入一個(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èn)題,于是上網(wǎng)查了下,發(fā)現(xiàn)問(wè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)了輸出是空的問(wè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è)問(wèn)題的辦法有兩種,如下

如果不是必須使用管道符的方式寫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è)問(wèn)題,但還是推薦第一種解決方法

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

相關(guān)文章

  • git 刪除分支和回滾的實(shí)例詳解

    git 刪除分支和回滾的實(shí)例詳解

    這篇文章主要介紹了git 刪除分支和回滾的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Linux實(shí)現(xiàn)徹底清理空文件夾的方法詳解

    Linux實(shí)現(xiàn)徹底清理空文件夾的方法詳解

    這篇文章主要介紹了Linux實(shí)現(xiàn)徹底刪除指定路徑下的所有空文件夾。這里的空文件夾的認(rèn)定標(biāo)準(zhǔn)是:如果某個(gè)文件夾的子文件夾全是空文件夾,也認(rèn)為該文件夾是空文件夾,需要的可以參考一下
    2022-10-10
  • gearman隊(duì)列持久化引發(fā)的問(wèn)題及解決方法

    gearman隊(duì)列持久化引發(fā)的問(wèn)題及解決方法

    這篇文章主要介紹了gearman隊(duì)列持久化引發(fā)的問(wèn)題及解決方法,需要的朋友可以參考下
    2014-07-07
  • shell編程基礎(chǔ)知識(shí)小結(jié)

    shell編程基礎(chǔ)知識(shí)小結(jié)

    這篇文章主要介紹了shell編程基礎(chǔ)知識(shí),包括文件類型、正則表達(dá)式、字符類、引號(hào)類型、變量設(shè)置、條件測(cè)試、命令執(zhí)行順序、腳本調(diào)試方面的介紹
    2013-02-02
  • linux?iptables防火墻中的工作常用命令

    linux?iptables防火墻中的工作常用命令

    linux系統(tǒng)的防火墻,IP信息包過(guò)濾u系統(tǒng),它實(shí)際上由兩個(gè)組件netfilter和iptables組成,這篇文章主要介紹了linux?iptables防火墻-工作常用命令,需要的朋友可以參考下
    2022-10-10
  • shell中set?-e的具體使用

    shell中set?-e的具體使用

    set?-e是一個(gè)Shell命令,它用于在腳本運(yùn)行時(shí)自動(dòng)退出,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 用shell+sendmail實(shí)現(xiàn)服務(wù)器監(jiān)控報(bào)警小腳本

    用shell+sendmail實(shí)現(xiàn)服務(wù)器監(jiān)控報(bào)警小腳本

    用shell+sendmail寫的服務(wù)器監(jiān)控報(bào)警小腳本,有需要的朋友可以參考下
    2013-03-03
  • 2022最新vmstate?命令詳解

    2022最新vmstate?命令詳解

    這篇文章主要介紹了vmstate?命令詳解2022,主要包括使用vmstat命令的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Linux 中常用的sed命令

    Linux 中常用的sed命令

    sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達(dá)式使用,功能不同凡響。接下來(lái)通過(guò)本文給大家介紹Linux 中常用的sed命令,感興趣的朋友一起看看吧
    2017-09-09
  • Linux shell腳本對(duì)常見(jiàn)圖片格式批量轉(zhuǎn)換為PDF文件

    Linux shell腳本對(duì)常見(jiàn)圖片格式批量轉(zhuǎn)換為PDF文件

    Linux Debian12基于ImageMagick圖像處理工具編寫shell腳本用于常見(jiàn)圖片png、jpg、jpeg、webp、tiff格式批量轉(zhuǎn)PDF文件,”多個(gè)圖片分開(kāi)生成多個(gè)PDF文件“或者“多個(gè)圖片合并生成一個(gè)PDF文件”,本文詳細(xì)介紹了Linux shell腳本對(duì)常見(jiàn)圖片格式批量轉(zhuǎn)換為PDF文件的操作
    2024-12-12

最新評(píng)論

太仓市| 铅山县| 威远县| 秦皇岛市| 栾城县| 孝义市| 彭水| 会理县| 巴里| 汤阴县| 奉节县| 惠安县| 墨玉县| 左贡县| 阜新市| 湟源县| 石阡县| 天峻县| 娱乐| 郓城县| 阿巴嘎旗| 通江县| 康乐县| 南和县| 麦盖提县| 卫辉市| 常熟市| 孟连| 两当县| 肃宁县| 城步| 济源市| 望都县| 庆城县| 阆中市| 银川市| 寿宁县| 澄江县| 南华县| 绥化市| 宜春市|