我有一个源变量,基本上是一串逗号分隔的元素:
SOURCES="a b c d e"
我希望用户为每个源输入一个目的地,因此我希望将此输入存储到类似于上面但包含目的地的字符串中。如果我想指定a = 1,b = 2 ......等,我会这样:
echo $DESTINATIONS >>> "1 2 3 4 5"
为了做到这一点,我这样做:
SOURCES="a b c d e"
DESTINATIONS=""
for src in $SOURCES
do
echo Input destination to associate to the source $src:
read dest
DESTINATIONS=$DESTINATIONS $dest
done
但是,如果我在echo
上执行$DESTINATIONS
,我会发现它是空的。
而且,在每个循环中,我的shell告诉我:
-bash: = **myInput**: command not found
知道我做错了吗?
答案 0 :(得分:5)
SOURCES="a b c d e"
DESTINATIONS=""
for src in $SOURCES
do
echo Input destination to associate to the source $src:
read dest
DESTINATIONS+=" ${dest}"
done
echo $DESTINATIONS
适合我。
答案 1 :(得分:3)
您应该使用数组,而不是分隔字符串。
sources=(a b c d e)
for src in "${sources[@]}"
do
read -p "Input destination to associate to the source $src" dest
destinations+=( "$dest" )
done
printf '%s\n' "${destinations[@]}"
答案 2 :(得分:2)
您的代码最明显的问题是这一行:
span {
width: 100px;
}
相反,上面的代码应写成:
DESTINATIONS=$DESTINATIONS $dest
问题:您正在执行$ dest并传递DESTINATIONS = $ DESTINATIONS的环境。这有希望解释您看到的错误消息。
我用我建议的引号尝试了你的代码,它运行正常。
答案 3 :(得分:1)
如果您使用未引用的空格,则shell将使用它来分割该行。
使用时:
DESTINATIONS=$DESTINATIONS $dest
变量$ dest被shell理解为执行命令,这就是你得到错误的原因:
-bash: = **myInput**: command not found
要解决这个问题,请引用该空格 有几种方法可以做到这一点:
DESTINATIONS=$DESTINATIONS" "$dest
DESTINATIONS=$DESTINATIONS' '$dest
DESTINATIONS="$DESTINATIONS"' '"$dest"
DESTINATIONS="$DESTINATIONS $dest"
最后一个选项可能是最简单也是最好的选择 你也可以使用这种语法(因为bash 3.1-alpha1):
DESTINATIONS+=" $dest"
另外,请!引用您的其他扩展:
echo "$DESTINATIONS"