폴더 안에 파일 이름을 저장하기 위해 배열/목록을 만들려고 합니다. 다음 명령은 알 수 없는 이유로 생성됩니다 :
. 어떻게 제거할 수 있습니까 :
?
> a=$(ls split*)
> echo $a
split_sam.o4433568 split_sam.o4433616 split_sam.o4441795 split-data-1:
답변1
) 명령 $(ls split*
번호만들다모든 파일 이름 - 다행히도! 또한 배열을 생성하지 않습니다. 무엇했다do는 와일드카드를 사용하여 호출한 다음 모든 결과 출력을 함께 붙여넣고(각 파일 이름 사이의 줄 바꿈을 제거 ls
하고 끝에 추가) 해당 조합을 변수에 할당합니다. 나중에 전화 하면split*
ls
echo $a
추가의원하지 않는 일부 처리가 발생합니다. 변수의 내용은 공백($IFS) 및 와일드카드 확장으로 추가로 분할됩니다. 운이 좋다면, 예를 들어 split space file
또는 split more*
!
혼란의 원인은 split-data-1:
해당 디렉토리에 호출된 파일이 있고 그 파일 ls
이 사용자에게 다시 전달된다는 것입니다.
대신, 실제로 원하는 파일에 맞는 와일드카드를 찾고 간단한 배열 할당을 사용하고 싶습니다.
a=(split_sam*)
또는
a=(split*)
원래 작성하신 대로 split-data-1:
파일은 계속 포함됩니다.
그런 다음 파일을 반복하거나 전체적으로 작업할 수 있습니다.
for file in "${a[@]}"
do
ls -d -- "$file"
done
또는
ls -d -- "${a[@]}"