배열(3개 요소)을 만들었습니다. 각 요소에는 쉼표로 구분된 문자열이 포함되어 있습니다. 배열은 파일을 한 줄씩 읽어서 생성됩니다. 파일에는 데이터베이스에서 출력된 필드가 포함되어 있습니다. 각 문자열 요소가 마치 배열인 것처럼 반복되도록 아래 코드를 작성했습니다.
배열의 마지막 요소에 추가 @ 기호가 있는 이상한 버그를 제외하고는 작동합니다.
(또한 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
.