如何在 Bash 中更改命令行参数?

     2023-03-07     169

关键词:

【中文标题】如何在 Bash 中更改命令行参数?【英文标题】:How to change a command line argument in Bash? 【发布时间】:2011-06-17 04:40:27 【问题描述】:

有没有办法改变 Bash 脚本中的命令行参数?例如,像这样调用 Bash 脚本:

./foo arg1 arg2  

有没有办法在脚本中更改 arg1 的值?比如:

$1="chintz"

【问题讨论】:

【参考方案1】:

您必须重置所有参数。改变例如$3:

$ set -- "$@:1:2" "new" "$@:4"

基本上你set 所有 参数到它们的当前值,除了你想改变的那些。 set -- 也被指定为 by POSIX 7。

"$@:1:2" notation 扩展为从偏移量1(即$1)开始的两个位置参数(因此符号中的2)。在这种情况下,它是 "$1" "$2" 的简写,但当您想要替换时它会更有用,例如"$17".

【讨论】:

所以,为了更改 $3,我必须同时更改 $1 和 $2,是吗?并将它们更改为什么? “重置”是什么意思? 感谢您的技巧!我很难将它用于嵌入空格的文件名。对于可能遇到该问题的其他任何人,请尝试将eval 放在每this 的行首。 当您知道要更改的参数的位置时就可以了。如果您实际上不知道它并需要动态更改它怎么办?我尝试使用 $ set -- "$:1:$pivot" 但它不接受那里的变量。 如何在函数内部做同样的事情?从函数内部调用时,您的解决方案似乎不起作用。 您不能在函数内更改脚本的位置参数 - 函数自己的参数会隐藏它们。但是,您可以将它们存储在一个数组中并对其进行操作。【参考方案2】:

优化易读性和可维护性,您最好将$1$2 分配给更有意义的变量(我不知道,input_filename = $1output_filename = $2 或其他东西),然后覆盖其中一个变量(input_filename = 'chintz'),保持脚本的输入不变,以防其他地方需要。

【讨论】:

我想要一种可以改变其中一个输入参数本身的方法。我需要这样做,因为我想从脚本中返回一个值。 thkala 建议的答案效果很好。谢谢回复!!! @Johnsyweb 同意。为了便于阅读,你的方法更好。 “你会更好”总是取决于用例,没有提供。 @Scott 比我写这个答案时年长 7 岁,经验也更多,我倾向于同意你的看法。 这不起作用的示例(除了使用 $FIRST_PARAMETER 之类的东西):根据实际值确定参数的用途和含义。【参考方案3】:

我知道这是一个旧的,但我发现thkala 的答案非常有帮助,所以我使用了这个想法并稍微扩展了它,使我能够为任何尚未定义的参数添加默认值 - 例如:


    # set defaults for the passed arguments (if any) if not defined.
    #
    arg1=$1:-"default-for-arg-1"
    arg2=$2:-"default-for-arg-2"
    set -- "$arg1" "$arg2"
    unset arg1 arg2

我希望这对其他人有用。

【讨论】:

如何转义变量中的特殊字符以在 bash 中提供命令行参数

】如何转义变量中的特殊字符以在bash中提供命令行参数【英文标题】:Howtoescapespecialcharactersinavariabletoprovidecommandlineargumentsinbash【发布时间】:2017-04-1803:03:42【问题描述】:我经常使用find在巨大的源代码树中搜索文件和符号。... 查看详情

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

】在linux/bash中添加到命令行参数【英文标题】:Prependtocommandlineargumentsinlinux/bash【发布时间】:2014-03-1411:24:03【问题描述】:我想将提供给脚本的命令行参数传递给另一个命令,但我还想先在前面添加一些额外的参数。我怎么能... 查看详情

在 Bash 中解析命令行参数的最佳方法是啥?

】在Bash中解析命令行参数的最佳方法是啥?【英文标题】:BestwaytoparsecommandlineargsinBash?在Bash中解析命令行参数的最佳方法是什么?【发布时间】:2013-01-2501:40:26【问题描述】:经过几天research,我仍然想不出在.sh脚本中解析cmdli... 查看详情

如何从 Bash 中的文件调用多个命令行参数?

】如何从Bash中的文件调用多个命令行参数?【英文标题】:HowtocallseveralcommandlineargumentsfromafileinBash?【发布时间】:2020-03-2905:54:13【问题描述】:我有一个编译的C++程序需要2个命令行参数才能运行-例如,如果我的参数是“10”和... 查看详情

Bash 中的命令行参数 [重复]

】Bash中的命令行参数[重复]【英文标题】:CommandlineargumentsinBash[duplicate]【发布时间】:2012-08-1517:04:37【问题描述】:我想编写一个带有不同参数的bash脚本。它应该像普通的linux控制台程序一样使用:my_bash_script-p2-l5-t20所以值2应... 查看详情

在 bash for 循环中使用命令行参数范围打印包含参数的括号

】在bashfor循环中使用命令行参数范围打印包含参数的括号【英文标题】:Usingcommandlineargumentrangeinbashforloopprintsbracketscontainingthearguments【发布时间】:2011-08-0703:50:08【问题描述】:这可能是一个蹩脚的问题。但是我从命令行[bashscr... 查看详情

如何从 Git Bash 中将命令行参数传递给 Windows 应用程序?

】如何从GitBash中将命令行参数传递给Windows应用程序?【英文标题】:HowtopasscommandlineargumentstoaWindowsappfromwithintheGitBash?【发布时间】:2018-02-1400:46:09【问题描述】:我正在尝试在Windows上的GitBash中运行devenv。devenv接受/buildDebug或/pr... 查看详情

访问 bash 命令行参数 $@ vs $*

】访问bash命令行参数$@vs$*【英文标题】:Accessingbashcommandlineargs$@vs$*【发布时间】:2012-09-0102:55:08【问题描述】:在许多SO问题和bash教程中,我看到我可以通过两种方式访问​​bash脚本中的命令行参数:$~>cattestargs.sh#!/bin/bashec... 查看详情

访问 bash 命令行参数 $@ vs $*

】访问bash命令行参数$@vs$*【英文标题】:Accessingbashcommandlineargs$@vs$*【发布时间】:2012-09-0102:55:08【问题描述】:在许多SO问题和bash教程中,我看到我可以通过两种方式访问​​bash脚本中的命令行参数:$~>cattestargs.sh#!/bin/bashec... 查看详情

如何在 awk 脚本中传递命令行参数

】如何在awk脚本中传递命令行参数【英文标题】:howtopassacommandlineargumentintheawkscript【发布时间】:2021-02-0111:52:22【问题描述】:以前有人问过这类问题,但不完全是这个问题。我是bash和awk脚本的新手。所以我不知道如何完成我... 查看详情

如何转义任意字符串以用作 Bash 中的命令行参数?

】如何转义任意字符串以用作Bash中的命令行参数?【英文标题】:HowcanIescapeanarbitrarystringforuseasacommandlineargumentinBash?【发布时间】:2011-09-1211:29:36【问题描述】:我有一个字符串列表,我想在单个Bash命令行调用中将这些字符串... 查看详情

如何在 bash 中正确“转发”函数参数?

】如何在bash中正确“转发”函数参数?【英文标题】:Howdoesoneproperly"forward"functionargumentsinbash?【发布时间】:2012-05-0114:46:33【问题描述】:我想知道如何将bash中的函数参数正确“转发”到另一个函数或程序。例如,在Mac... 查看详情

Bash 命令行和输入限制

】Bash命令行和输入限制【英文标题】:Bashcommandlineandinputlimit【发布时间】:2013-10-2116:50:45【问题描述】:在bash(或其他shell)中是否对输入的长度施加了某种字符限制?如果有,字数限制是多少?即是否可以在bash中编写一个太... 查看详情

如何从上一个 bash 命令中获取倒数第二个参数? (在交互式 bash shell 中)

】如何从上一个bash命令中获取倒数第二个参数?(在交互式bashshell中)【英文标题】:Howtogetsecond-to-lastargumentfrompreviousbashcommand?(inaninteractivebashshell)【发布时间】:2015-03-1910:01:04【问题描述】:如何在bash交互式shell中轻松地从上... 查看详情

bash入门教程10-处理用户输入

用户输入参数是程序运行的必要条件,如何在Bash中调用输入的参数,将Bash和GCC联合调试,这是linux工程师必备的一个能力。$./shawn1030??这是一个很典型的例子,后面两个就是传入bash的命令行参数。bashshell会将一些成为位置参数... 查看详情

将命令行参数转换为 Bash 中的数组

...toanarrayinBash【发布时间】:2012-09-2413:48:36【问题描述】:如何将命令行参数转换为bash脚本数组?我想拿这个:./something.sharg1arg2arg3并将其转换为myArray=(arg1arg2arg3)这样我就可以在脚本中进一步使用myArray。这篇之前的SO帖子很接近... 查看详情

如何访问函数内调用者的命令行参数?

】如何访问函数内调用者的命令行参数?【英文标题】:Howtoaccesscommandlineargumentsofthecallerinsideafunction?【发布时间】:2011-02-1400:23:48【问题描述】:我正在尝试在bash中编写一个可以访问脚本命令行参数的函数,但它们被替换为函... 查看详情

如何在 Linux 中使用终端命令将文件参数传递给我的 bash 脚本? [复制]

】如何在Linux中使用终端命令将文件参数传递给我的bash脚本?[复制]【英文标题】:HowcanIpassafileargumenttomybashscriptusingaTerminalcommandinLinux?[duplicate]【发布时间】:2011-04-0120:20:36【问题描述】:所以我的问题是如何在Linux中使用终端... 查看详情