Bash

將命令行參數傳遞給 shell 腳本內的程序

  • August 22, 2016

至於./script.sh arg1 [arg2 arg3 ...], 命令行參數arg1, arg2, … 可以通過$1, $2, … 獲取,但參數數量固定。

在 shell 腳本中,我想將參數從 fromarg2傳遞給程序,

#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...

既然可能有一個或多個論點,我怎麼能這樣做?

通常的方法是保存arg1 ( "$1") 的副本並將參數移動一個,因此您可以將整個列表稱為"$@"

#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"

bash 當然有一些數組支持,但提出的問題不需要它。

如果連arg1都是可選的,你會像這樣檢查它:

if [ $# != 0 ]
then
   arg1="$1"
   shift 1
fi

您可以使用參數擴展對位置參數進行切片。語法是:

${parameter:offset:length}

如果length省略,則將其視為最後一個值。

當您要從第二個到最後一個參數傳遞時,您需要:

${@:2}

例子:

$ foo() { echo "${@:2}" ;}

$ foo bar spam egg
spam egg

引用自:https://unix.stackexchange.com/questions/304895