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

 ccsv0601604 发布于 2023-02-12 17:40

这个问题涉及在automator osx中运行的bash脚本.我正在使用automator动作来获取和过滤来自finder的一堆文件引用.然后我通过自动机器操作将该文件夹的名称附加到该列表中.然后,Automator将这些参数提供给名为"run shell script"的操作.我不确定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 /在线/ WAV_TEST/Testbok 50/03/03000 43-003.wav/Volumes/G-Raid/Online/WAV_TEST/Testbok 50

在这种情况下,路径为3个文件和一个文件夹.

在shell脚本中,我启动了一个名为ripcheckc*的应用程序,其中args从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

与以前相同,但没有文件夹.

现在,如果我使用"$@"as参数运行ripcheckc 它可以工作(但由于参数列表中的最后一个路径,以后会失败)如果我使用${_args[@]}该应用程序将只是静默中止.当我回显$@并且_args输出看起来相同,除了最后一个参数.

我的问题是 - $ @和$ _args之间的区别是第一个有效输入而第二个没有?

*该应用程序是ripcheckc

我希望我的问题有道理.

编辑:解决了.

3 个回答
  • 我以前用过这种bash单线

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

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


    这个怎么运作:

    $# 是参数的数量

    $((...))是一个算术表达式,因此$(($#-1))比参数的数量少一个.

    ${variable:position:count}是一个子串表达式:它countvariable位置开始提取字符.在特殊情况下,variableis @表示参数列表,它从列表开头提取count 参数position.这里position1第一个参数,count比先前计算出的参数数少一个.

    set -- arg1...argn 将参数列表设置为给定的参数

    因此最终结果是参数列表被替换为新列表,其中新列表是除最后一个参数之外的原始列表.

    2023-02-12 17:40 回答
  • 你也可以获得除了最后一个参数之外的所有参数

    "${@:0:$#}"
    

    老实说,这有点粗略,因为它似乎是(ab)使用参数从1开始编号而不是0的事实.

    更新:这仅适用于处理中的错误(最迟在4.1.2中修复)$@.它适用于3.2版.

    2023-02-12 17:42 回答
  • 假设你已经有了array,你可以说:

    unset "array[${#array[@]}-1]"
    

    例如,如果您的脚本包含:

    array=( "$@" )
    unset "array[${#array[@]}-1]"    # Removes last element -- also see: help unset
    for i in "${array[@]}"; do
      echo "$i"
    done
    

    通过说:bash scriptname foo bar baz将返回来调用它:

    foo
    bar
    

    2023-02-12 17:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有