Bash Shell 的 巢狀的While帶來的問題
while 1; do
a = 1
cat file | while line || [ -n "${line}" ]; do
a = 3
done
echo "${a}"
done
這段程式碼輸出的a一直都是2,而不是3。就是說內層的while中對a的修改並沒有作用到外層。
原因:
因為內層的while使用了管道,在Bash Shell中使用管道會生成一個子Shell,相當於呼叫了另一個Shell指令碼。
有這種需求的,可以改一下程式碼:
換成重定向就可以了while 1; do a = 1 while line || [ -n "${line}" ]; do a = 3 done < file echo "${a}" done
相關推薦
Shell程式設計-11-子Shell和Shell巢狀
目錄 什麼是子Shell 子Shell產生的途徑 Shell指令碼呼叫模式 什麼是子Shell 子Shell的概念其實是貫穿整個Shell的,如果想要更好的理解和寫Shell指令碼則必須要了解子Shell的相關知識。其概念如下所示: 子Shell本質就是從當前的Shel
子shell及shell巢狀模式知識
出處:《跟老男孩學Linux:Shell程式設計實戰》 子shell的知識及實踐說明 什麼是子shell 子shell的本質可以理解為shell的子程序,子程序的概念是由父程序的概念引申而來的,在Linux系統中,系統執行的應用程式幾乎都是從init(pi
for 迴圈巢狀 while 的神奇問題
在Xcode7中寫了一段OC程式碼,在一個for迴圈中嵌套了一個while迴圈。因為for迴圈中有一個非同步執行,我想等非同步執行完,再執行下一個for迴圈,所以用while迴圈做了一個等待。 程式碼如下: BOOL flag = NO; for (id obj in ar
shell巢狀expect執行screen命令
start.sh #!/usr/bin/env bash screen_name1=$"online" screen -dmS $screen_name1 cmd1=$"php pushOnlineN
Bash Shell 的 巢狀的While帶來的問題
今天遇到了一個問題,當使用了巢狀的while之後,發現變數的值不會變更,例如下列程式碼while 1; do a = 1 cat file | while line || [ -n "
shell的基本語句(for迴圈,while迴圈,巢狀迴圈,if 的多重迴圈,case語句)
1.for迴圈(遍歷) for 條件 do 動作 done 練習1:檢測當前172.25.254網段主機的狀態 [[email protected] mnt]# vim test.sh 1 #!/bin/bash 2 for ((IP=1;IP<=10
Linux Shell程式設計 17 巢狀迴圈
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Scala ---- while迴圈、for迴圈、增強for迴圈、巢狀for迴圈
3.5. 迴圈 A)、while (條件語句){程式碼塊} B)、do{程式碼塊}while(條件語句) C)、for迴圈語法結構:for (i <- 表示式/陣列/集合) 1、簡單for迴圈 &n
while,for 迴圈輸出九九乘法表,使用python 巢狀迴圈
while迴圈: i=1 while i<=9: j=1 while j<=i: print('%d*%d=%d'%(j,i,i*j),end='\t') # \t 可以使其上下對齊 j+=1 print('\n')
大家一起學python-day3-for和while基礎知識、巢狀和簡單的字串知識
#題外話:快捷鍵1.ctrl+y刪除那一整行 # 題外話:快捷鍵1.ctrl+y刪除那一整行 # 2.把那一行向下移動。shift+ctrl+向下 # 1.用while迴圈列印小星星 num = 1 while num <6: print('*'*num) num+=1
Linux Shell程式設計(17)——巢狀迴圈
巢狀迴圈就是在一個迴圈中還有一個迴圈,內部迴圈在外部迴圈體中.在外部迴圈的每次執行過程中都會觸發內部迴圈,直到內部迴圈執行結束.外部迴圈執行了多少次,內部迴圈就完成多少次.當然,不論是外部迴圈或內部迴圈
Python基礎小練習——for while迴圈,巢狀迴圈
1.在控制檯隨機輸入5個數,求和: while: for: 2:隨機輸入5個數,輸出最大值和最小值: 3.輸出一個三位數,然後將其倒敘輸出: 4.用while和for巢狀迴圈列印10行小星星 類似: * ** *** **** wh
Linux Shell程式設計 17 巢狀迴圈
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興! 巢狀迴圈就是在一個迴圈中還有一個迴圈,內部迴圈在外部迴圈體中.在外部迴圈的每次執行過程中都會觸發內部迴圈,直到內部迴圈執行結束.外部迴圈執行了多少次,內部迴圈就
關於在hue當中調shell指令碼的操作(這裡的shell 指令碼是在shell腳本當中巢狀shell指令碼的操作使用source的方式)
這兩天在做資料的匯入操作,為了方便資料的匯入我們採用sqoop的方式將資料匯入。但是在表很多的情況下,在hue當中部署工作流就是一件很麻煩的事情, 然後想著能不能通過shell指令碼調shell指令碼的方式實現在一個shell腳本當中就可以實現對多個匯入操作指令碼的呼叫。 操作指令碼如下: #!/
shell通過巢狀迴圈實現日期遞增輸出
for i in 01 02 03 04 05 06 07 08 09 10 11 12; do for j in 0 1 2 3 4 5 6; do DATE=$(date +"%Y%m%d" -d "2016${i}28 +${j}day"); echo $
continue 在 switch中使用 (switch巢狀在while迴圈中)
如果你在switch中使用continue,continue生效是對於while迴圈 如果你在switch中使用break,break生效是對於switch。 #include <stdio.h> int main() { int i_index;
有關shell命令可以巢狀,以下是最簡單的一例
[[email protected] ~]# cat aaahello2.chello.sh[[email protected] ~]# ls `cat aaa` -al-rw-r--r-- 1 root root 54 Dec 18 00:58 hel
豬豬的IT之路---Java成長之路day04(do...while,for,迴圈使用關鍵字,迴圈巢狀)
迴圈: While(迴圈條件){ 迴圈體; } 迴圈條件為true時迴圈或重複執行迴圈體,直到迴圈條件為false迴圈結束 注意: 1.迴圈開始條件一般要定義在迴圈結構前面 2.迴圈操作(迴圈體)中一般都應該存在步進操作(++或–) do…while迴圈語句 do…while迴圈語句和whi
shell條件巢狀(if條件語句)
if condition then command1 command2 ... commandN fi 當然,也可以寫成一行(適用於終端命令提示符),像這樣: if test $[2*3] -eq $[1+5]; then echo 'The two numbers are
用while和for迴圈巢狀輸出表格
<html> <head> <title>使用while迴圈巢狀輸出表格</title> </head> <body> <?php