Questions tagged «function»

有关在Unix和Linux环境中使用功能的问题(主要但并非唯一地是shell脚本)。有关使用Python,Perl,Ruby等进行编程的问题,应在Stack Overflow上提出。

1
在某些命令上跟踪某些参数
假设我有一个命令git branch(总是有几个单词)。 我要跟踪的是何时使用参数执行此命令。例如,如果我执行命令时git branch develop没有错误,我想保存develop在文件中。 我试图覆盖我的git命令.bash_profile,如下所示: git () { if [ $# -eq 3 ] then git $@ echo $2 > /path/tacked_parameters.txt else git $@ fi } 但是似乎效果不佳。有什么办法吗?
10 bash  shell  function 

6
Bash功能装饰器
在python中,我们可以使用针对函数自动应用和执行的代码来修饰函数。 bash有任何类似的功能吗? 在我目前正在使用的脚本中,我有一些样板可以测试所需的参数,如果不存在则退出,如果指定了调试标志,则会显示一些消息。 不幸的是,我必须将此代码重新插入每个函数中,如果要更改它,则必须修改每个函数。 有没有办法从每个函数中删除此代码并将其应用于所有函数,类似于python中的装饰器?
10 bash  function 

2
Bash函数接受参数或管道的输入
我想以一种可以接受参数或管道输入的方式编写以下bash函数: b64decode() { echo "$1" | base64 --decode; echo } 所需用法: $ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ b64decode < file.txt $ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
10 bash  pipe  function  stdin 

2
传递参数以保持原样
我有以下功能: bar() { echo $1:$2; } 我正在从另一个函数调用此函数foo。foo本身称为: foo "This is" a test 我想得到以下输出: This is:a 也就是说,bar接收到的参数应该与我传递给的参数相同foo。 foo为了实现这一目标需要如何实施?我已经尝试了以下两个实现,但是都没有用: foo() { bar $*; } –输出: this:is foo() { bar "$*"; } –输出: this is a test: 我的问题实际上是如何保留引号。这有可能吗?

6
使用df和mount时仅显示物理磁盘
当我使用df或时mount,我对物理磁盘分区最感兴趣。如今,这些命令的输出已被临时和虚拟文件系统,cgroups和其他我不感兴趣的事物所淹没。 我在输出中的物理分区始终以“ /” 开头,因此我尝试为df和创建别名mount: alias df1="df | egrep '^/'" alias mount1="mount | egrep '^/'" 这样就可以了mount1(尽管它/以红色显示' '),但是因为df1我有时想将-h选项添加到df而不能这样做df1 -h。我不希望对每个可能要使用的选项组合都没有别名。我是否真的需要研究在bash中定义函数(我不想这样做)?有更好的解决方案df1吗?



2
Gawk:将数组传递给函数
卡在GNU awk 3.1.6中,认为我已经解决了它的数组错误,但是在600行awk程序中仍然遇到了范围问题。需要验证对awk中数组作用域的理解才能找到我的错误。 给定这个说明性的awk代码... function foo(ga) { ga[1] = "global result" } garray[1] = "global" foo(garray) print garray[1] 将打印... global result 由于数组总是通过引用传递给函数,因此所有数组始终是全局的。无法创建本地数组。它是否正确?一直无法找到明确说明这一点的文档。 由于我正在调试,并且3.1.6本身在该区域中存在已知的错误,因此我试图确定awk的错误在哪里消失并从我的那里开始。 补充:那么ga []为什么在函数内部起作用? 首先,foo(ga)实际上不需要将数组传递给函数。只需以garray[]在函数内部进行。这样做并没有可衡量的性能损失,它有助于调试和错误报告。 在使用中foo(ga),ga[]是全局数组的同义词garray[]。与其成为的本地副本garray[],不如说是一个指向garray[],而是,就像符号链接是指向文件的指针一样,因此可以使用多个名称访问同一文件(或数组)。 补充:澄清格伦·杰克曼的答案 虽然在函数外部创建的数组对于函数是全局的,可以传递给函数,也可以在函数内部引用,但是在函数内部创建的数组的确确实在函数本地,并且在函数外部不可见。修改杰克曼先生的例子说明了这一点... awk ' function bar(x,y) { split("hello world", y) print "x[1] inside: " x[1] print "y[1] inside: " y[1] } BEGIN { …
9 awk  function  array 

1
如何在zsh中创建一个函数来调用具有相同名称的现有命令?
如何编写一个zsh调用与该函数本身同名的现有命令的函数?例如,我试图以此来说明我的问题: function ls { ls -l $1 $2 $3 } 当我执行它时,ls *我得到以下信息: ls:1: maximum nested function level reached 我认为这是因为函数被递归调用。我该如何避免呢? 这是一个粗略的示例,在这种情况下,别名可以胜任,但是我有一个更复杂的示例,其中别名不适合,因此我需要编写一个函数。
9 zsh  function 

4
匿名传递代码块。功能
是否可以将命令块视为匿名函数? function wrap_this { run_something # Decide to run block or maybe not. run_something else } wrap_this { do_something do_somthing else } # Do something else wrap_this { do_something_else_else do_something_else_else_else } (我意识到您为每个块创建了一个函数或文件,但是我发现在某些情况下此选项更清晰,更易于阅读。) while用do/done和function做{ multiple lines }。我知道BASH没有匿名函数,但是是否可以将多个命令传递给另一个函数,就像定义一个函数时可以做到的那样while?
9 bash  function 

3
Shell:在if中使用带有参数的函数
我正在尝试执行以下代码,但是当我尝试在if语句中使用函数时,-bash: [: too many arguments出现错误。为什么会这样呢? 先感谢您! notContainsElement () { local e match="$1" shift for e; do [[ "$e" == "$match" ]] && return 1; done return 0 } list=( "pears" "apples" "bananas" "oranges" ) blacklist=( "oranges" "apples" ) docheck=1 for fruit in "${list[@]}" do if [ notContainsElement "$fruit" "${blacklist[@]}" -a …

2
zsh中函数的调用上下文:等同于bash`caller`
在bash中,我可以写: caller 0 并接收呼叫者上下文的: 电话号码 功能 脚本名称 这对于调试非常有用。鉴于: yelp () { caller 0; } 然后,我可以写信yelp查看正在到达的代码行。 我可以实现caller 0在bash如下: echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]" 我怎样才能获得相同的输出caller 0中zsh?

2
检测可选函数参数(标量)
考虑以下脚本: function alfa(bravo, charlie) { if (charlie) return "charlie good" else { return "charlie bad" } } BEGIN { print alfa(1, 1) print alfa(1, 0) print alfa(1, "") print alfa(1) } 结果: charlie good charlie bad charlie bad charlie bad Awk是否可以告诉何时未提供参数?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.