[解決済み] Bashで関数の引数として配列を渡す方法
2023-03-21 17:27:36
質問
ご存知のように、bashプログラミングでは、引数を渡す方法として
$1
, ...,
$N
. しかし,複数の引数を受け取る関数に引数として配列を渡すのは簡単ではありません.以下はその一例である。
f(){
x=($1)
y=$2
for i in "${x[@]}"
do
echo $i
done
....
}
a=("jfaldsj jflajds" "LAST")
b=NOEFLDJF
f "${a[@]}" $b
f "${a[*]}" $b
説明したように、関数
f
は2つの引数を受け取ります。1つ目の引数は
x
に割り当てられ、2番目は配列である
y
.
f
は2つの方法で呼び出すことができます。最初の方法は
"${a[@]}"
を第一引数にとり、その結果は次のようになります。
jfaldsj
jflajds
もう一つの方法は
"${a[*]}"
を第一引数とした場合、その結果は
jfaldsj
jflajds
LAST
どちらの結果も私が望んだ通りではありません。そこで、関数間で正しく配列を渡す方法について、何かアイデアをお持ちの方はいらっしゃいませんか?
どのように解決するのですか?
配列を渡すことはできず、その要素(つまり展開された配列)のみを渡すことができます。
#!/bin/bash
function f() {
a=("$@")
((last_idx=${#a[@]} - 1))
b=${a[last_idx]}
unset a[last_idx]
for i in "${a[@]}" ; do
echo "$i"
done
echo "b: $b"
}
x=("one two" "LAST")
b='even more'
f "${x[@]}" "$b"
echo ===============
f "${x[*]}" "$b"
もう一つの可能性は、配列を名前で渡すことでしょう。
#!/bin/bash
function f() {
name=$1[@]
b=$2
a=("${!name}")
for i in "${a[@]}" ; do
echo "$i"
done
echo "b: $b"
}
x=("one two" "LAST")
b='even more'
f x "$b"
関連
-
[解決済み] Scala:Arrayに要素を追加する最良の方法は何ですか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 最大和サブアレイのブルートフォースはなぜO(n^2)なのか?
-
[解決済み] MATLABでn次元の行列の各要素を反復処理するにはどうすればよいですか?
-
[解決済み】bashでパラメータとして配列を渡す。
-
[解決済み] 数百万のピクセルを持つ2Dの非ボックス化ピクセル配列にはどのようなHaskell表現が推奨されますか?
-
[解決済み] arrayfunはmatlabの明示的なループよりかなり遅くなることがあります. なぜでしょうか?
-
[解決済み] 配列全体のダンプ:console.log と console.dir の出力は "... NUM more items "です。]
-
[解決済み] MongoDB: 配列内のインデックスで参照されるサブ要素を更新するには?
-
[解決済み] Swiftで配列を集合にする
-
[解決済み] コマンドの出力を配列に代入する方法を教えてください。
-
[解決済み] Swiftのクロージャで$0と$1は何を意味するのか?