我们如何在shell脚本中的for循环中放置一个列表? 我的意思是想象我们有1000个字符串:string1.yaml ... string1000.yaml,我们想写一个列表 LL = {string1.yaml ... string1000.yaml} 并在剧本中说:
for i in LL
do
...
done
特别是如果一个接一个地写一个
,就会出现断线问题for i in string1.yaml ... string1000.yaml
非常感谢
答案 0 :(得分:2)
在POSIX shell中,并不是一个好方法。天真的方法:
LL="a b c d e"
for i in $LL; do
...
done
依赖于列表中没有元素包含分隔符(此处为空格)的事实。如果您提前知道列表中不的字符,则可以使用IFS
。例如,如果您知道没有项目包含逗号,则可以使用
LL="a,b c,d,e" # Yes, the second item is "b c"
# This is not a perfect way to backup IFS; I'm ignoring the corner
# case of what happens if IFS is currently unset.
OLDIFS=$IFS
IFS=,
for i in $LL; do
...
done
IFS=$OLDIFS
如果您实际使用的是bash
或其他更现代的shell,则可以使用专门针对此类问题引入的数组。数组本质上是第二级引用,因此您不需要自己提供明确的分隔符。
LL=(a "b c" d e) # Four items, the second item contains a space
for i in "${LL[@}}"; do
...
done
答案 1 :(得分:0)
如果您要处理大量项目,可能需要将它们放在单独的文件中,并按以下方式阅读:
$ cat strings.txt
string1.yaml
[...]
string1000.yaml
$ cat loop.sh
while IFS= read -r line
do
[...] "$line"
done < strings.txt
这样可以避免使用数据混乱代码,并且符合POSIX标准而不会过于复杂。