![$VAR 값에 이미 백틱 및/또는 작은따옴표가 포함되어 있습니다. 그것을 처리하는 방법? $VAR을 프로그램에 올바르게 전달하려면 어떻게 해야 합니까? [복사]](https://linux55.com/image/230401/%24VAR%20%EA%B0%92%EC%97%90%20%EC%9D%B4%EB%AF%B8%20%EB%B0%B1%ED%8B%B1%20%EB%B0%8F%2F%EB%98%90%EB%8A%94%20%EC%9E%91%EC%9D%80%EB%94%B0%EC%98%B4%ED%91%9C%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%98%EC%96%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%EA%B7%B8%EA%B2%83%EC%9D%84%20%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%3F%20%24VAR%EC%9D%84%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%97%90%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EC%A0%84%EB%8B%AC%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
$ bash --version
GNU bash, versione 5.2.26(1)-release (x86_64-pc-linux-gnu)
어떻게 대처해야 할지 모르겠어요$VAR내부 값에 작은따옴표( '
) 및/또는 역따옴표( `
)가 포함된 경우.
실행해야 해요찾다-exec
에 있는 항목을 기반으로 합니다 list.txt
.
list.txt
포함하다:
- 하나파일명.EXT각 라인
- 각 줄은 다음으로 시작합니다.새로운 팀(
\n
)
모든 것이 제대로 작동하는지 확인하기 위한 예방 테스트로 다음 명령을 실행했습니다.
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name "$song"; done < list.txt
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name "*$song*"; done < list.txt
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name '$song'; done < list.txt
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name "${song}"; done < list.txt
그들 중 누구도 일하지 않았습니다 ...
안타깝게도 특수 문자로 인해 모든 항목이 나열되지는 않습니다.파일 이름따라서 $song
변수를 올바르게 인용할 수 없습니다(큰따옴표 또는 작은따옴표 사용).
라인 예시파일명.EXT다음에서 발견됨 list.txt
:
Pino Daniele ~ [2000] Napul`e' - Raccolta completa ~ 01.14) `O ssaje comme fa `o core.mp3
[CONCERTI] Malora -- Live@TANT`E'! (Agosto '05, Villa Fossa` [presa diretta, mixer:stereo]) -- #15. 20:30 ... Tutto tace?.wave
답변1
여기서 문제는 작은따옴표( '
) 및/또는 역따옴표( `
)가 아닙니다.
대신에 대괄호( [
및 ]
)를 이스케이프 처리해야 합니다.GNU 찾기-name
(또는)의 가치를 -iname
다음과 같이 해석합니다.전반적인 상황.
정말 고마워요무루그리고카밀 마코로프스키나에게 올바른 방향을 알려줬어요!
이것이 내가 이 문제를 해결한 방법이다소식통:
while IFS= read -r song; do
unsquare=$(printf '%s\n' "$song" | sed 's/\[/\\[/g;s/\]/\\]/g') &&
find /mnt/EXTHDD/unsorted -type f -name "$unsquare"
done < list.txt