如何在Korn Shell脚本中的集合中表示“空”值?

时间:2014-04-17 19:58:29

标签: shell ksh

#!/bin/sh

LIST1="0 1"
LIST2="a b"

for L1 in $LIST1; do
    for L2 in $LIST2; do
        echo $L1$2
    done
done

这应该显示如下:

0a
0b
1a
1b

如何在两个列表中表示空值,以便脚本显示:

emptyempty
a
b
0
0a
0b
1
1a
1b

我尝试了$(),$ {EMPTY},$ *,如LIST1 =“$ {EMPTY} 0 1”等,但该值被忽略,输出以0a,0b等开始。 谢谢!

2 个答案:

答案 0 :(得分:3)

使用数组:

LIST1=( "" 0 1 )
LIST2=( "" a b )

for L1 in "${LIST1[@]}"; do for L2 in "${LIST2[@]}"; do echo "$L1$L2"; done; done

a
b
0
0a
0b
1
1a
1b

答案 1 :(得分:1)

如果你需要在没有数组支持的POSIX shell中工作,你可以使用位于类似数组的位置参数:

set -- "" 0 1
for L1 in "$@"; do
( set -- "" a b
  for L2 in "$@"; do
      echo "$L1$L2"
  done
)
done

第一个循环中的子shell是必要的,以避免覆盖第一个循环使用的位置参数。