Bash
將命令行參數傳遞給 shell 腳本內的程序
至於
./script.sh arg1 [arg2 arg3 ...]
, 命令行參數arg1
,arg2
, … 可以通過$1
,$2
, … 獲取,但參數數量不固定。在 shell 腳本中,我想將參數從 from
arg2
傳遞給程序,#/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