首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否删除Bash中的位置参数?

是否删除Bash中的位置参数?
EN

Stack Overflow用户
提问于 2011-07-06 18:45:41
回答 5查看 12.6K关注 0票数 15

您可以使用shift跳过位置参数,但是您可以通过传递位置来删除位置参数吗?

代码语言:javascript
运行
复制
x(){ CODE; echo "$@"; }; x 1 2 3 4 5 6 7 8
> 1 2 4 5 6 7 8

我想在x()中添加删除位置参数3的代码。我不想做echo "${@:1:2} ${@:4:8}"。运行代码后,$@应该只包含“%1 2%4%5%6%7% 8”。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-06 19:11:10

如果您希望能够将参数传递给另一个进程,或者处理以空格分隔的参数,最好的方法是重新set参数:

代码语言:javascript
运行
复制
$ x(){ echo "Parameter count before: $#"; set -- "${@:1:2}" "${@:4:8}"; echo "$@"; echo "Parameter count after: $#"; }
$ x 1 2 3 4 5 6 7 8
Parameter count before: 8
1 2 4 5 6 7 8
Parameter count after: 7

要测试它是否与非平凡参数一起工作:

代码语言:javascript
运行
复制
$ x $'a\n1' $'b\b2' 'c 3' 'd 4' 'e 5' 'f 6' 'g 7' $'h\t8'
Parameter count before: 8
a
1 2 d 4 e 5 f 6 g 7 h   8
Parameter count after: 7

(是的,$'\b'是一个退格键)

票数 11
EN

Stack Overflow用户

发布于 2016-05-09 21:36:50

代码语言:javascript
运行
复制
x(){
    #CODE
    params=( $* )
    unset params[2]
    set -- "${params[@]}"

    echo "$@"
}

输入:x 1 2 3 4 5 6 7 8

输出:1 2 4 5 6 7 8

票数 9
EN

Stack Overflow用户

发布于 2011-07-06 18:56:23

来自tldp

代码语言:javascript
运行
复制
# The "unset" command deletes elements of an array, or entire array.
unset colors[1]              # Remove 2nd element of array.
                             # Same effect as   colors[1]=
echo  ${colors[@]}           # List array again, missing 2nd element.

unset colors                 # Delete entire array.
                             #  unset colors[*] and
                             #+ unset colors[@] also work.
echo; echo -n "Colors gone."               
echo ${colors[@]}            # List array again, now empty.
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6595129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档