[英]Sorting List and adding sorted values to new list in bash
我正在嘗試對列表的所有值進行排序,並將排序后的值添加到另一個列表中。 sort -nu工作正常,但他不想將$ i添加到新的SortedList中。 這可能是什么問題?
function Sort() {
SortedList=""
for i in $list;
do
echo $i
$SortedList= "$SortedList $i"
done | sort -nu
}
echo“這是已排序的列表:$ SortedList”
您的解決方案嘗試將列表項存儲在排序本身之前的SortedList
。 echo $i
部分將列表發送到管道,然后sort -nu
將其打印(排序)到STDOUT
。 如果要將排序列表存儲到變量,請嘗試以下操作:
function Sort() {
SortedList=`for i in $list; do echo $i; done | sort -nu`
}
如果您想知道為什么函數調用后SortedList
變量為空,那么問題出在sort
命令的管道上。 沒有管道,它可以正常工作。 從維基:
在最常用的簡單管道中,shell通過管道連接一系列子過程,並在每個子過程中執行外部命令。 因此,外殼程序本身不對流經管道的數據進行直接處理。
這意味着管道的for
部分開始一個新的子進程(已初始化已排序的var),該子進程將按預期更改已排序的變量。 但是,當過程結束時,您將返回具有變量初始值的環境。
另外,請查閱這篇文章( 從subshell設置父shell的變量 )
我認為您可以執行以下操作。
#!/bin/bash
list="7 4 2 5 3"
function Sort() {
SortedList=$(echo $list | tr " " "\n" | sort -nu)
}
Sort
echo $SortedList
可能會失敗,因為我們仍然不知道您的list
樣子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.