这是我的剧本:
#/bin/bash
list="a b c"
for i in $list; do
echo $i
done
这有效:
➜ ~ ./lol.sh
a
b
c
这不是:
➜ ~ . ./lol.sh
a b c
为什么split不能用于dot命令,我该如何解决?
答案 0 :(得分:2)
列表不应该表示为字符串。使用数组语法。
list=( a b c )
for i in "${list[@]}"; do
echo "$i"
done
这有几个原因。
setopt sh_word_split
或使用参数扩展${(=)list}
或${(ps: :)list}
hello[world]
,如果当前目录包含,则会以意外方式执行名为hellow
,helloo
或以其他方式匹配glob的文件。答案 1 :(得分:0)
虽然我注意到 Charles Duffy 对列表的评论,但这是我的解决方案/测试。
#!/bin/zsh
function three()
{
first=$1
second=$2
third=$3
echo "1: $first 2: $second 3:$third"
}
setopt sh_word_split
set "1 A 2" "2 B 3" "3 C 4" "4 D 5"
for i;do
three $i;
done
这将输出
1: 1 2: A 3:2
1: 2 2: B 3:3
1: 3 2: C 3:4
1: 4 2: D 3:5