簡體   English   中英

排序列表並將排序后的值添加到bash中的新列表中

[英]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),該子進程將按預期更改已排序的變量。 但是,當過程結束時,您將返回具有變量初始值的環境。

另外,請查閱這篇文章( 從subshel​​l設置父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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM