簡體   English   中英

在 shell 腳本中使用 for 循環遍歷參數列表?

[英]Iterating through argument list using for loop in shell script?

我想顯示通過 arguments 提供給我的 shell 腳本的文件的內容。我需要使用普通的“for (())”循環而不是“for x in arr”循環來執行此操作。

這是我的代碼。 我應該如何為該 cat 命令正確輸入文件名?

for (( i=1;$i<=$#;i=$i+2 ))
do
    cat '$'$i   #display the contents of the file currently being traversed
done

你可以使用類似的東西:

for (( i=1;$i<=$#;i=$i+1 ))
do
    cat ${!i}  #display the contents of the file currently being traversed
done

對應的手冊部分:

如果參數的第一個字符是感嘆號,則引入了一層變量間接。 Bash使用參數rest組成的變量值作為變量名; 然后擴展此變量,並在替換的 rest 中使用該值,而不是參數本身的值。 這稱為間接擴展。 例外情況是下面描述的 ${.prefix*} 和 ${.name[@]} 的擴展。 感嘆號必須緊跟在左大括號之后,以引入間接性。

for 循環的正常行為是遍歷 arguments。要遍歷所有 arguments:

#!/bin/sh -e
for x; do cat $x; done

您可以稍微修改它以僅對每個其他參數進行操作,就像您在示例中以許多不同的方式所做的那樣。 一種可能性是:

for x; do expr $(( i++ )) % 2 > /dev/null || cat "$x"; done

如果你堅持使用非標准形式,你可以使用 ${,var} bashism 這在絕大多數 shell 中都會失敗,或者你可以使用eval

for (( i = 1; i <= $#; i += 2 ))
do
    eval cat '"$'$i\"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM