我正在尝试对列表的所有值进行排序,并将它们排序到另一个列表中。 排序-nu工作正常,但他不想将$ i添加到新的SortedList。这可能是什么问题?
function Sort() {
SortedList=""
for i in $list;
do
echo $i
$SortedList= "$SortedList $i"
done | sort -nu
}
回声"这是排序列表:$ SortedList"
答案 0 :(得分:0)
您的解决方案会尝试在排序本身之前将列表项存储到SortedList
。 echo $i
部分将列表发送到管道,然后sort -nu
将其打印(已排序)到STDOUT
。如果要将排序列表存储到变量中,请尝试以下操作:
function Sort() {
SortedList=`for i in $list; do echo $i; done | sort -nu`
}
如果您想知道函数调用后SortedList
变量为什么为空,则问题是sort
命令的管道。没有管道它工作正常。来自wiki:
在最常用的简单管道中,shell通过管道连接一系列子进程,并在每个子进程中执行外部命令。因此,shell本身不会直接处理流经管道的数据。
这意味着管道的for
部分启动了一个新的子流程(初始化了已排序的var),它会按预期更改已排序的变量。但是,当流程结束时,您将返回环境中的变量的初始值。
答案 1 :(得分:0)
我认为您可以执行以下操作。
#!/bin/bash
list="7 4 2 5 3"
function Sort() {
SortedList=$(echo $list | tr " " "\n" | sort -nu)
}
Sort
echo $SortedList
它可能会失败,因为我们仍然不知道你的list
是怎样的。