在unix / linux命令行(例如BASH)中定义函数

有时候,我有一个单独的内容,我为了一个特定的任务重复了很多次,但是可能永远不会以完全相同的forms再次使用。 它包含一个我从目录列表中粘贴的文件名。 之间的某处并创build一个bash脚本我想也许我可以在命令行创build一个单线程函数,如:

numresults(){ ls "$1"/RealignerTargetCreator | wc -l } 

我已经尝试了一些使用eval的方法,使用了numresults=function... ,但还没有find正确的语法,到目前为止还没有发现任何东西。 (所有的东西都是关于bash函数的教程)。

Solutions Collecting From Web of "在unix / linux命令行(例如BASH)中定义函数"

引用我在Ask Ubuntu上的类似问题的答案 :

bash中的函数本质上被命名为复合命令(或代码块)。 从man bash

 Compound Commands A compound command is one of the following: ... { list; } list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. ... Shell Function Definitions A shell function is an object that is called like a simple command and executes a compound command with a new set of positional parameters. ... [C]ommand is usually a list of commands between { and }, but may be any command listed under Compound Commands above. 

没有理由,只是语法。

wc -l之后用分号尝试:

 numresults(){ ls "$1"/RealignerTargetCreator | wc -l; } 

不要使用ls | wc -l ls | wc -l因为如果文件名中有换行符,它可能会给你错误的结果。 你可以使用这个函数来代替:

 numresults() { find "$1" -mindepth 1 -printf '.' | wc -c; } 

您也可以不find文件来计数文件。 使用数组,

 numresults () { local files=( "$1"/* ); echo "${#files[@]}"; } 

或使用位置参数

 numresults () { set -- "$1"/*; echo "$#"; } 

为了匹配隐藏的文件,

 numresults () { local files=( "$1"/* "$1"/.* ); echo $(("${#files[@]}" - 2)); } numresults () { set -- "$1"/* "$1"/.*; echo $(("$#" - 2)); } 

(从结果中减去2补偿..

最简单的方法可能是回应你想要回来的东西。

 function myfunc() { local myresult='some value' echo "$myresult" } result=$(myfunc) # or result=`myfunc` echo $result 

无论如何, 在这里你可以找到一个很好的方法来达到更高级的目的