Bash 스크립트 내에서 이름에 특수 문자가 포함된 파일에 대한 기호 링크를 에코하거나 생성할 수 없습니다.

Bash 스크립트 내에서 이름에 특수 문자가 포함된 파일에 대한 기호 링크를 에코하거나 생성할 수 없습니다.

다음 명명 규칙을 사용하여 파일에 대한 심볼릭 링크를 만들려고 합니다.

.$abc$namehere.zip;1

보시다시피 다음과 같은 특수 문자가 있습니다. $;

내 bash 스크립트에는 다음 코드 줄이 있습니다.

FILE1=`find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1`
ln -s $FILE1 .
echo "$FILE1"

명령줄에서 개별적으로 명령을 실행하면 find관심 있는 파일에 대한 결과가 화면에 표시됩니다. 그러나 위 스크립트 안에 배치하면 Symlink 명령은 다음을 반환합니다.

ln: `./.': cannot overwrite directory

echo 명령은 파일 이름 대신 빈 줄을 반환합니다.

특수 문자를 사용하여 이러한 파일에 대한 심볼릭 링크를 만들 수 있도록 스크립트에서 이 문제를 해결하는 방법에 대한 도움을 받을 수 있습니까?

답변1

$()역따옴표 대신 사용 :

FILE1=$(find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1)
ln -s "$FILE1" .
echo "$FILE1"

문제는 파일 이름을 큰따옴표로 묶었기 때문에 bash가 파일 이름을 확장한다는 것입니다.

\.\$abc\$*namehere*.zip*

로 확장됩니다

\.namehere*.zip*

$()이것이 백틱이 더 이상 사용되지 않으며 항상 선호되어야 하는 많은 이유 중 하나입니다.

관련 정보