如何迭代由Bash中的變量定義的一系列數字?當變量給出范圍時,我如何在Bash中迭代一組數字?我知道我可以這樣做(在Bash中稱為“序列表達式”)。文獻資料): for i in {1..5}; do echo $i; done這意味著:1 2 3 4 5然而,如何用變量替換任何一個范圍端點?這不管用:END=5for i in {1..$END}; do echo $i; done其中的指紋:{1..5}
4 回答

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
seq
END=5for ((i=1;i<=END;i++)); do echo $idone# ==> outputs 1 2 3 4 5 on separate lines
for ((expr1;expr2;expr3));
for (expr1;expr2;expr3)
((expr))

MM們
TA貢獻1886條經驗 獲得超2個贊
這就是原始表達式不起作用的原因。
從…巴什:
在任何其他展開之前執行大括號展開,并在結果中保留其他展開所特有的任何字符。這是嚴格意義上的文字。Bash不對擴展上下文或大括號之間的文本應用任何語法解釋。
所以,支撐展開是早期作為純文本宏操作所做的事情,在此之前。參數展開
shell是宏處理器和更正式的編程語言之間高度優化的混合。為了優化典型的用例,語言變得更加復雜,并接受了一些限制。
建議
我建議堅持POSIX1特征。這意味著使用for i in <list>; do
,如果列表已經已知,則使用while
或seq
,見:
#!/bin/shlimit=4i=1;?while?[?$i?-le?$limit?];?do ??echo?$i ??i=$(($i?+?1))done#?Or?-----------------------for?i?in?$(seq?1?$limit);?do ??echo?$idone
1.Bash是一個很好的shell,我通過交互方式使用它,但是我不把bash主義放在我的腳本中。腳本可能需要一個更快、更安全、更嵌入風格的shell。
添加回答
舉報
0/150
提交
取消