在 linux/bash 中添加到命令行参数

Posted

技术标签:

【中文标题】在 linux/bash 中添加到命令行参数【英文标题】:Prepend to command line arguments in linux/bash 【发布时间】:2014-03-14 11:24:03 【问题描述】:

我想将提供给脚本的命令行参数传递给另一个命令,但我还想先在前面添加一些额外的参数。我怎么能用 bash 做到这一点?

这会将所有参数发送到命令:

command $@

但我想要更多类似的东西:

command [argument1, argument2, $@]

你怎么能在 bash 中做这样的事情?

【问题讨论】:

【参考方案1】:

@ThatOtherGuy 的回答是正确的。

如果您希望将几个参数“取消移位”到位置参数中,请执行以下操作:

set -- arg1 arg2 "$@"
cmd "$@"

【讨论】:

【参考方案2】:

如果你有grep foo并且你想在foo之前添加-f,你可以使用grep -f foo。同样的事情也适用于这里:

cmd argument1 argument2 "$@"

【讨论】:

@bt,请注意此处使用引号。这非常重要:它完全按照接收到的方式传递参数。 谢谢!完美运行!在什么情况下不能在 $@ 周围加上引号把你弄乱? $@ 的行为与$* 类似,并且受分词和通配符的影响。最常见的表现是你不能对包含空格的文件名做任何事情。 嗯,正在寻找一种方法来代替cmd "x y $@",以便稍后我可以在cmd 中操作“$1” @AlexanderMills 这是一个非常糟糕的设计决定,我强烈建议您重新考虑。该脚本将很脆弱,无法处理带有空格的参数。如果你坚持,你可以使用cmd "x y $*"【参考方案3】:

如果您想要更通用的方法来执行此操作(推荐),请使用:

#!/usr/bin/env bash

function xyz 
  echo "$args[@]"  # arguments will printed out


function abc 
    local args=()
    args+=(argument1)
    args+=(argument2)
    args+=("$@")
    xyz "$args[@]"

为了测试,源码上面的代码

source script.sh && abc

【讨论】:

以上是关于在 linux/bash 中添加到命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

Linux一步一步学Linux——Bash常用快捷键(11)

Linux Bash 提示符的一些骚操作

Linux Bash提示符的一些骚操作

Linux Bash 提示符的一些骚操作

转帖Linux Bash 提示符的好玩操作

涨姿势 | Linux Bash 提示符的一些骚操作