いくつかのコマンドラインパラメータを配列として保存し、後で配列を使用するスクリプトを作成していますが、スクリプトから正しい配列長を取得するのに問題があります。
ターミナルでbashを使って次のことを試しました。
$:>array=( 1 2 3 4 ) $:>echo array = ${array[*]} and length = ${#array[*]}
echoの出力は次のとおりです。
array = 1 2 3 4 and length = 4
うまくいきます。問題のあるスクリプトを簡素化しました。同じことを行う必要がありますが、長さ1の配列が表示されます。スクリプトは次のとおりです。
#!/bin/bash list=${@} echo array = ${list[*]} and length = ${#list[*]}
端末でスクリプトを呼び出すと
$:>./script.sh ${test[*]}
出力は次のとおりです
array = 1 2 3 4 and length = 1
私は配列を保存して印刷するためにいくつかの異なる方法を試しましたが、この問題を解決する方法がわかりません。どんな解決策でも大変感謝します!
答え1
入力を単一の値に平坦化します。
あなたはしなければなりません
list=("${@}")
配列とパラメータにスペースを保持できます。
見逃した場合、最初の引数が分割されるため、"
このような内容は長さ5を返します。私達が得る./script.sh "a b" 2 3 4
ように"
$ cat x
#!/bin/bash
list=("${@}")
echo array = ${list[*]} and length = ${#list[*]}
$ ./x "a b" 2 3 4
array = a b 2 3 4 and length = 4