2012-07-17 90 views
3

我需要编写一个bash脚本,它以排序顺序输出其命令行参数,每行一个。按排序顺序输出自变量

我写了这个脚本,它工作正常,但有没有其他方式?特别是不输出到文件和排序。

#!/bin/bash 

for var in $* 
do 
    echo $var >> file 
done 

sort file 
rm file 

程序的测试运行:

$ script hello goodbye zzz aa 
aa 
goodbye 
hello 
zzz 

回答

6
#!/bin/bash 

for var in "[email protected]"; do 
    echo "$var" 
done | sort 

你想在引号使用[email protected] (而不是$*)以适应空格的参数,如

script hello "goodbye, cruel world" 

该管道摆脱了临时文件的需要。

+0

'$ var'也需要引号,否则将在变量扩展后尝试分词和路径名扩展。 – geirha 2012-07-17 17:57:45

+0

好点,我只是想着整条线路被整理。 – chepner 2012-07-17 18:05:34

+0

@chepner,如何根据决定输入大小的第一个参数对下列参数进行排序? – ThisGuy 2013-12-04 14:58:03

9

可以通过管道for循环进行排序,或者只是做

printf '%s\n' "[email protected]" | sort 
+0

我总是忘记'printf'提供的隐式循环。 – chepner 2012-07-17 17:16:02