다음 명명 규칙을 사용하여 파일에 대한 심볼릭 링크를 만들려고 합니다.
.$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*
$()
이것이 백틱이 더 이상 사용되지 않으며 항상 선호되어야 하는 많은 이유 중 하나입니다.