![에코를 사용하여 파일 이름의 마지막 부분 추출 - 와일드카드를 사용하여 변수 할당](https://linux55.com/image/216246/%EC%97%90%EC%BD%94%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EB%B6%80%EB%B6%84%20%EC%B6%94%EC%B6%9C%20-%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B3%80%EC%88%98%20%ED%95%A0%EB%8B%B9.png)
파일 이름의 일부를 추출하려고 하는데 첫 번째 _ 이후의 모든 내용을 추출하고 싶습니다. 작동하는 솔루션을 찾았습니다. 아래를 참조하세요.
file=22NGS71294_S191_R1_001.fastq.gz
echo $file
22NGS71294_S191_R1_001.fastq.gz
echo ${file#*[_ ]}
S191_R1_001.fastq.gz
그러나 와일드카드를 사용하면 작동이 중지됩니다.
file2=*R1*
echo $file2
22NGS71294_S191_R1_001.fastq.gz
echo ${file2#*[_ ]}
22NGS71294_S191_R1_001.fastq.gz
$file 및 $file2에 대한 echo 명령이 정확히 동일한 결과를 제공하기 때문에 이것이 작동하지 않는 이유를 모르겠습니다. 누군가 이 동작을 설명할 수 있나요?
답변1
sh
, ksh
, bash
( 또는zsh
아니요이 globassign
옵션이 설정된 경우) 스칼라 할당의 RHS에서 파일 이름 생성(일명 "globbing")이 발생하지 않습니다.file2=*R1*
당신의 echo $file2
보상은 22NGS71294_S191_R1_001.fastq.gz
다음과 같습니다인용되지 않음확장은 이 시점에서 파일 이름 생성의 영향 을 $file2
받지만 echo ${file2#*[_ ]}
사실상 .echo ${'*R1*'#*[_ ]}
echo *R1*
언제 큰따옴표가 필요합니까?.
ksh/bash/zsh에서 사용할 수 있습니다대량으로할당 - 종종 *R1*
여러 파일 이름이 생성될 수 있으므로 이 작업을 수행해야 합니다. 예를 들어 Bash에서는 다음과 같습니다.
shopt -s nullglob
file2=(*R1*)
echo "${file2[@]#*_}"