[英]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.