mkdir -p "~/temp/`date "+%m%d"`/"
이러면 mkdir: no such file or directory 오류가 남
근데
mkdir -p ~/temp/`date "+%m%d"`/
이렇게 큰따옴표를 없애면 오류가 안나고 의도한 대로 실행이 됨
이유를 모르겠음.. 왜 이러는 거임?
해결:
~를 큰따옴표 밖으로 빼면 됨
mkdir ~"/temp/$(date '+%m%d')/"
~는 큰따옴표나 작은따옴표 안에서 확장되지 않는듯
작은따옴표 안에서만 안되는 줄 알았음
아니 씨발 아까 답해줬는데 글삭튀쳐하노
잘못올렸음 그리고 대답 당연한거 아님 이라고밖에 안했잖음
왜 그러긴 씨발아 mkdir -p "~/temp/`date "+%m%d"`/" 에서 왼쪽부터 읽으면 mkdir -p "~/temp/`date " 인데 느그 홈 디렉토리엔 'temp/`date ' 파일이 있노
`로 감싼거 eval임
echo "~/temp/`date "+%m%d"`/" 는 제대로 나오던데?
this is a "test" message 란 텍스트가 있을때 이를 "로 감싸면 "this is a "test" message" 가 되잖슴 님 원래 생각은 test를 감싸고 또 전체 문장을 감싸는거였겠지만 파서 입장에서는 "this is a " 랑 test 그리고 " message"로 보인다고
아니 echo에 넣으면 잘된다구요 뭐 둘이 파서가 다름??
~가 " 안에 들어가면 확장이 안댐
~ 대신에 $HOME 쓰면 될지도
아니.. mkdir나 echo나 다 셸이 실행하는거잖음.. 둘이 파서가 같을텐데 님 말이 맞다면 왜 echo는 되는거
double quotes이슈는 내가 잘 알지도 못하고 나댔던거고 여기선 그렇게 크리티컬한 이유는 아닌듯. echo는 에러날게 없지 걍 출력하는거니까 mkdir은 그 경로가 유효해야 하고 아마 여기 문제는 ~가 확장안되서 생기는 이슈 아닐까 싶은데 테스트해봐
~써서 안되면 $HOME써봐라 그리고 ""사이에 ``말고 $()를 사용해 그러면 ()안에 명령어 인자로 ""를 전달해도 왠만하면 파싱 잘 된다
mkdir -p "~/.1temp/$(date "+%m%d")/" 는 안되고 $HOME 쓰니까 되네
~ 때매
해결함 ~를 큰따옴표 밖으로 빼면 됨 mkdir ~"/temp/$(date '+%m%d')/"
https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html