これを1時間検索しても私が答えを見つけられないのは驚くべきことです。 私はこのような私のスクリプトに配列を渡すしたいと思います:配列引数をBashスクリプトに渡す方法
test.sh argument1 array argument2
私は、次のような別のbashスクリプトでこれを入れたくない:
array=(a b c)
for i in "${array[@]}"
do
test.sh argument1 $i argument2
done
これを1時間検索しても私が答えを見つけられないのは驚くべきことです。 私はこのような私のスクリプトに配列を渡すしたいと思います:配列引数をBashスクリプトに渡す方法
test.sh argument1 array argument2
私は、次のような別のbashスクリプトでこれを入れたくない:
array=(a b c)
for i in "${array[@]}"
do
test.sh argument1 $i argument2
done
バッシュ配列として子プロセスに配列変数をエクスポートしていないので、「ファーストクラス値」ではありません - あなたは1「もの」のようにそれらを周りに渡すことはできません。
test.sh argument1 ${array[*]} argument2
あなたは、配列を読むことができます:test.sh
はbashスクリプトで、私は
#!/bin/bash
arg1=$1; shift
array=("[email protected]")
last_idx=$((${#array[@]} - 1))
arg2=${array[$last_idx]}
unset array[$last_idx]
echo "arg1=$arg1"
echo "arg2=$arg2"
echo "array contains:"
printf "%s\n" "${array[@]}"
を行うと、これはあなたのコマンドである場合
test.sh argument1 "${array[@]}" argument2
偉大な答え。私はこれが 'test.sh argument1 array argument2'のOPの要件に適合していないが、' test.sh argument1 argument2 array'(配列が最後のもの)に変更された場合、それほどうまくいかないことを知っています。 – doubleDown
良い答え。しかし、技術的には配列をスクリプトに渡すことはありません。OPが 'test.sh argument1 array1 array2'のように2つの配列変数をこのスクリプトに渡す必要がある場合はどうでしょうか? – anubhava
スクリプトこのようなarrArg.sh
を持っている:
#!/bin/bash
arg1="$1"
arg2=("${!2}")
arg3="$3"
arg4=("${!4}")
echo "arg1=$arg1"
echo "arg2 array=${arg2[@]}"
echo "arg2 #elem=${#arg2[@]}"
echo "arg3=$arg3"
echo "arg4 array=${arg4[@]}"
echo "arg4 #elem=${#arg4[@]}"
今のセットアップシェルでこのようなあなたの配列:
arr=(ab 'x y' 123)
arr2=(a1 'a a' bb cc 'it is one')
そして、このような引数を渡す:
. ./arrArg.sh "foo" "arr[@]" "bar" "arr2[@]"
スクリプトの上には印刷されます:
arg1=foo
arg2 array=ab x y 123
arg2 #elem=3
arg3=bar
arg4 array=a1 a a bb cc it is one
arg4 #elem=5
注:私が. ./script
構文を使用してスクリプトを実行していますという変な表示される場合があります。これは、現在のシェル環境ののスクリプトのコマンドを実行するためのものです。
Q.なぜ現在のシェル環境、なぜサブシェルではないのですか?
A. bashはdocumented here by bash author himself
ようにそれを呼び出しますと仮定
test.shに次のように入力します。
arg1=$1
arg2=${2[*]}
arg3=$3
あなたに文句を言いますが(「悪い置換」)、動作します。
http://stackoverflow.com/a/1063367/2235132 – devnull