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

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

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

最近實現(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”運行shell中的命令,當(dāng)運行到非內(nèi)建指令時,會創(chuàng)建“孫shell”運行非內(nèi)建指令

變量的作用于在每個shell中有效,所以,非內(nèi)建指令中定義的這些變量就只能在孫shell運行,而在子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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • git 刪除分支和回滾的實例詳解

    git 刪除分支和回滾的實例詳解

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

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

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

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

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

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

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

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

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

    shell中set?-e的具體使用

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

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

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

    2022最新vmstate?命令詳解

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

    Linux 中常用的sed命令

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

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

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

最新評論

敦煌市| 阿坝| 招远市| 峨眉山市| 庆云县| 宿迁市| 湾仔区| 枣庄市| 聂荣县| 老河口市| 贵南县| 高青县| 永福县| 从江县| 鹰潭市| 乐至县| 青海省| 华池县| 天台县| 缙云县| 盖州市| 雅安市| 崇仁县| 抚顺市| 麻江县| 云林县| 广汉市| 深水埗区| 德惠市| 泸西县| 祥云县| 阳谷县| 白城市| 松潘县| 津市市| 静乐县| 扶风县| 阿城市| 会昌县| 海晏县| 伊金霍洛旗|