配列(3つの要素)を作成しました。各要素にはカンマで区切られた文字列が含まれています。配列は、ファイルを1行ずつ読み取ることによって生成されます。ファイルには、データベースから出力されたフィールドが含まれています。各文字列要素が配列のように繰り返されるように、以下のコードを書きました。
配列の最後の要素に追加の@記号がある奇妙なバグを除いて、これはうまくいきます。
(また、Macでbash 4を使用していると判断しましたが、-Aが機能しないと述べました。)
i=0
declare -a items
while read line
do
items[i]=$line
((i++))
done < test_file1.txt
declare -a item_arr
for item in "${items[@]}"
do
item_arr=($item[@])
done
echo "${item_arr[4]}://${item_arr[1]}:${item_arr[3]}@${item_arr[2]}/control/configinfo"
出力は次のとおりです。 https[@]://192.168.1.152:username@pwd/control/configinfo
@シンボルが印刷されるのはなぜですか?時間を無駄にしていますか? awkを使うべきですか?そうでなければ、これは非常に単純なアプローチのように感じますが、これは比較的経験が不足している可能性があります。初期化する必要がある項目の最大数はおそらく1〜200です。
私のコードの目的は、各プロジェクトのカールリクエストを作成するために、データベースからいくつかのconfig_info、ユーザー名、パスワード、IPアドレス、プロトコルをすべて取得するカールリクエストを生成することです。
よろしくお願いします!
答え1
item
はスカラー文字列変数(配列ではない)なので、次のように話す必要があります。
item_arr=($item)
代わりに
item_arr=($item[@])
もし$item
そうThe quick brown fox
item_arr=($item[@])
~になる
item_arr=(The quick brown fox[@])
答え2
あなたは正しいです、awkは簡単です。
ソース例/tmp/test2.txt:
$ cat /tmp/test2.txt
192.168.1.152 pwd username https
$ awk '{print $4 "://" $1 ":" $3 "@" $2 "/control/configinfo" }' /tmp/test2.txt
https://192.168.1.152:username@pwd/control/configinfo
答え3
bash
ファイルの内容(IPアドレス、ユーザー名、パスワードなど)をシェルメモリ(配列など)に保存する必要がないと仮定し、pureでこれを簡単に行うには、次のようにします。
while read ip_address pwd username protocol
do
echo "${protocol}://${ip_address}:$username@$pwd/control/configinfo"
done < test_file1.txt
これにより、ソリューションよりもメンテナンスが容易になりますawk
。