Ped*_*rda 6 shell bash parameter function shopt
我需要读取和写入$@函数调用者的位置参数。Bash 手册页说:
shell 函数是一个对象,它像一个简单的命令一样被调用,并使用一组新的位置参数执行一个复合命令
所以$@在每次调用时都会重写。我寻找了一些“特殊参数”,但一无所获。shell 变量BASH_ARGV似乎解决了我的问题,但是它需要shopt -s extdebug启用,在我的机器中不是默认行为,也不是在生产中打开的选项。
extdebug
If set, behavior intended for use by debuggers is enabled:
...
4. BASH_ARGC and BASH_ARGV are updated as described in their
descriptions above.
...
Run Code Online (Sandbox Code Playgroud)
Bash 是否能够在$@没有 的情况下读取或写入函数的调用者BASH_ARGV?您是否认为 Bash 受到限制并使用另一个 shell 进行脚本编写?
编辑:我想要getopt在我的助手库中使用一个精美的包装器。所以与它相关的所有行为都在一个函数中。无需检查错误或set --.
函数不能影响其调用者的位置参数。这是设计使然:位置参数对于函数来说是私有的。
\n\n让你的函数在数组上工作。
\n\nmyfunction () {\n local _myfunction_arrayname=$1\n shift\n \xe2\x80\xa6 # work on the positional parameters\n eval "$_myfunction_arrayname=(\\"\\$@\\")"\n}\nmyfunction foo "$@"\nset -- "${foo[@]}"\nRun Code Online (Sandbox Code Playgroud)\n\n在 ksh93 和 bash 中,有一种迂回的方法可以通过将别名和.( source) 内置函数与进程替换相结合来完成某些操作。例子。
alias myfunction=\'. <(echo myfunction_body \\"\\$@\\"; echo set -- "\\"\\${new_positional_parameters[@]}\\"")\'\nRun Code Online (Sandbox Code Playgroud)\n\n将函数的主要工作放入myfunction_body并使其设置数组new_positional_parameters。调用 后,位置参数将设置为放入 中的myfunction值。myfunction_bodynew_positional_parameters
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |