在循环中连接字符串中的输入

时间:2017-03-21 17:26:27

标签: string bash sh string-concatenation

我有一个源变量,基本上是一串逗号分隔的元素:

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

知道我做错了吗?

4 个答案:

答案 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"