![알 수 없는 파일 이름의 데이터를 배열로 읽어들이나요? [폐쇄]](https://linux55.com/image/107025/%EC%95%8C%20%EC%88%98%20%EC%97%86%EB%8A%94%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EB%B0%B0%EC%97%B4%EB%A1%9C%20%EC%9D%BD%EC%96%B4%EB%93%A4%EC%9D%B4%EB%82%98%EC%9A%94%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
질문:
파일 이름: Celebs
파일 내:
Beyonce
Brittney
Kevin
George
read
및 명령을 사용하여 코드를 작성해야 합니다 while
. 이것이 내가 지금까지 갖고 있는 것이지만 내 쉘 스크립트에서는 실행되지 않기 때문에 잘못된 것 같습니다.
Names
또한 파일 이름이 항상 작동하는 것은 아니며 코드에 임의의 파일을 넣는 방법을 모른다는 말을 들었습니다 . 또한 알 수 없는 파일 이름과 파일 안에 있는 사람의 이름으로 배열을 만들고 터미널에서 인쇄해야 했습니다.
그래서 나도 인쇄해야 해요.
list= find -name "Celebs" -type f #if its an unknown file name this method won't work
start=0 #position of the empty array
declare -a People
while read -r line
do
People[$start]=$line #lines read to be stored in the array
((start++))
done<$list
답변1
가정:
- 이것은
bash
스크립트입니다. - 표준 입력에서 데이터를 읽습니다.
- 입력의 각 줄은 배열에 저장되고 모든 입력을 읽은 후에 표시됩니다.
표준 입력에서 데이터를 얻으면 데이터가 원래 어디에 저장되어 있는지 알 수 없는 문제가 해결됩니다. 이를 통해 스크립트 사용자는 명령에서 데이터를 자유롭게 입력하거나 파일에서 입력을 리디렉션할 수 있습니다.
해결책:
#!/bin/bash
# 'names' is an array, empty from the start
declare -a names=()
while read name; do
# Append the name to the end of the array
names+=( "$name" )
done
# Output all names with each being prepended by "Name: "
printf 'Name: %s\n' "${names[@]}"
이름을 읽는 중이므로 선택합니다.아니요-r
와 함께 스위치를 사용하십시오 read
. 제가 아는 한, 백슬래시가 포함된 이름은 없습니다...
연산자를 사용하여 배열에 값을 추가할 수 있습니다 +=
.
printf
입력을 "루프"하고 배열의 각 요소에 형식을 적용하므로 출력을 수행하는 데 루프가 필요하지 않습니다 . 1 .
질문의 데이터를 사용하여 테스트해 보세요.
bash-4.4$ bash script <testdata
Name: Beyonce
Name: Brittney
Name: Kevin
Name: George
1은 printf
배열에 대해 모르지만 가져온 각 입력 줄을 사용하고 형식 지정 문자열에 따라 형식을 지정합니다. 변수 확장으로 ${names[@]}
인해 여러 줄의 입력이 발생합니다 printf
.