我想將 2 個固定的和剩余的 'n' 個引數傳遞給我想存盤在陣列變數中的腳本。有人可以建議如何通過代碼實作這一目標。例子:
sh myScript.sh fixedArgument1 fixedArgument2 var1 var2 ... varN
N 可以是任何值,但不超過 15。
另外,我可以通過 $1 和 fixedArgument2 $2 在腳本中獲取 fixedArgument1 的值,但是如何將剩余的引數放入陣列變數中。
uj5u.com熱心網友回復:
只需移開固定位置引數并使用"$@". 例如:
#!/bin/bash
echo first arg: "$1"
echo 2nd arg: "$2"
shift
shift
array=("$@")
for element in "${array[@]}"; do
echo "$element"
done
確保您使用的是支持陣列的外殼。 sh可能不會,因為/bin/sh通常不會bash。
但請注意,聽起來您可能作業太努力了。為什么要費心把論點放在一個陣列中呢?您可以$@像從陣列中訪問它們一樣輕松地訪問它們,這樣做可能更有意義。該陣列可能只會混淆代碼。例如:
#!/bin/sh
echo "first arg: '$1'"
echo "2nd arg: '$2'"
shift 2 # discard the first two arguments
if test $# -gt 0; then
echo There are $# arguments remaining:
i=1
# Iterate over the remaining arguments
for x; do echo "arg $((i )): '$x'"; done
fi
uj5u.com熱心網友回復:
#!/bin/bash
function main {
local arg1=$1 arg2=$2 remaining=("${@:3}")
...
}
main "$@"
同樣正如已經建議的那樣,您不需要將剩余的引數存盤到陣列中,您可以通過 直接訪問它"${@:3}",或者"$@"在執行后通過shift 2。在for回圈中,in ...如果目標是"$@"并且位置引數未在回圈內修改,則可以忽略該部分,set --因為這可能會或可能不會影響回圈引數,具體取決于實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407339.html
標籤:
