fish shell:如何将元素追加到数组中

时间:2018-04-25 17:06:52

标签: fish

我正在尝试将一个元素附加到数组中。

我尝试的是:

 for i in (seq 10)
            set children $children $line[$i]
 end

但是这不会添加新元素。它创建一个包含所有子项的变量,然后是空格和$ line [$ i]。

2 个答案:

答案 0 :(得分:1)

使用fish版本2.7.1-1113-ge598cb23(3.0 pre-alpha)你可以使用set -a(append)或set -p(prepend)。

set -l array "tiny tim" bob
set -l children joe elias matt

echo $children
for i in (seq 2)
    set -a children $array[$i]
end
echo $children

Output:
joe elias matt
joe elias matt tiny tim bob

您还可以使用string命令,该命令应该适用于最新版本的鱼​​。

set -l array "tiny tim" bob
set -l children joe elias matt

echo $children
for i in (seq 2)
    set children (string join " " $children $array[$i])
end
echo $children

Output:
joe elias matt
joe elias matt tiny tim bob

答案 1 :(得分:-1)

事实证明问题中的方法实际上是正确的,但在我的特定情况下,我必须在函数末尾echo $children并将该函数的输出设置为另一个变量。在这种情况下,函数的输出是一个单独的字符串,其中包含$children空格分隔的元素。

所以我所做的解决方案是在函数末尾echo $children | tr ' ' \n

tr用换行符替换空格。这种方式$another_var将是一个等于$children的数组。

这是一个完整的(ish)示例:

function get_children
    # fill the array of children

    echo $children | tr ' ' \n
end

set another_var (get_children $parent)