Remove last argument from argument list of shell script (bash)

后端 未结 3 748
伪装坚强ぢ
伪装坚强ぢ 2020-12-24 13:47

This question concerns a bash script that is run in automator osx. I am using automator actions to get and filter a bunch of file references from the finder. Then I append t

3条回答
  •  失恋的感觉
    2020-12-24 14:18

    I have used this bash one-liner before

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

    It sets the argument list to the current argument list, less the last argument.


    How it works:

    • $# is the number of arguments
    • $((...)) is an arithmetic expression, so $(($#-1)) is one less than the number of arguments.
    • ${variable:position:count} is a substring expression: it extracts count characters from variable starting at position. In the special case where variable is @, which means the argument list, it extracts count arguments from the list beginning at position. Here, position is 1 for the first argument and count is one less than the number of arguments worked out previously.
    • set -- arg1...argn sets the argument list to the given arguments

    So the end result is that the argument list is replaced with a new list, where the new list is the original list except for the last argument.

提交回复
热议问题