gpt4 book ai didi

bash - 从 shell 脚本 (bash) 的参数列表中删除最后一个参数

转载 作者:行者123 更新时间:2023-11-29 08:45:57 30 4
gpt4 key购买 nike

这个问题涉及在 automator osx 中运行的 bash 脚本。我正在使用自动化操作从查找器中获取和过滤一堆文件引用。然后我也通过自动操作将父文件夹的名称附加到该列表。 Automator 然后将这些参数提供给一个名为“运行 shell 脚本”的操作。我不确定 automator 究竟是如何调用脚本的,但是当回显时参数列表看起来像这样: echo "$@"

/Volumes/G-Raid/Online/WAV_TEST/Testbok 50/01/01000 43-001.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/02/02000 43-002.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/03/03000 43-003.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50

在本例中为 3 个文件和一个文件夹的路径。

在 shell 脚本中,我启动了一个名为 ripcheckc* 的应用程序,其中包含从 automator 传递的参数减去列表中的最后一个参数(文件夹)。

我用它来删除最后一个参数:

_args=( "$@" )
unset _args[${#_args[@]}-1]

这是echo $_args:

/Volumes/G-Raid/Online/WAV_TEST/Testbok 50/01/01000 43-001.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/02/02000 43-002.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/03/03000 43-003.wav

与之前相同,但没有文件夹。

现在,如果我使用 "$@" 作为参数运行 ripcheckc,它可以工作(但稍后由于参数列表中的最后一条路径而失败)如果我使用 ${_args[ @]} 应用程序将静默中止。当我回显 $@_args 时,除了最后一个参数外,输出看起来完全相同。

我的问题是 - 使第一个有效输入和第二个无效输入的 $@ 和 $_args 之间有什么区别?

*申请是ripcheckc

我希望我的问题是有道理的。

编辑:已解决。

最佳答案

我以前用过这个bash one-liner

set -- "${@:1:$(($#-1))}"

它将参数列表设置为当前参数列表,减去最后一个参数。


工作原理:

  • $#是参数个数
  • $((...)) 是一个算术表达式,所以 $(($#-1)) 比参数个数少一个。
  • ${variable:position:count} 是一个 substring expression : 它从 variable 的位置开始提取 count 个字符。在special case其中variable@,表示参数列表,它从开头的列表中提取countarguments>位置。在这里,第一个参数的 position1 并且 count 比之前计算出的参数数量少一个。
  • 设置 -- arg1...argn sets the argument list对于给定的论点

所以最终的结果是参数列表被一个新的列表所取代,其中新的列表就是除了最后一个参数之外的原始列表。

关于bash - 从 shell 脚本 (bash) 的参数列表中删除最后一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398499/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com