변수를 사용하여 터치로 파일 만들기

변수를 사용하여 터치로 파일 만들기

이 변수가 있습니다.

toto=123456

touch "$toto.hihi.log"작동하고 다음과 같은 파일을 생성합니까?123456.hihi.log

그런데 touch "$totohihi.log"아무 일도 일어나지 않았나요?

답변1

당신은해야합니다

touch "${toto}hihi.log"

문제는 중괄호가 없으면 쉘이 변수 이름에 몇 개의 문자가 있는지 알 수 없다는 것입니다. 따라서 모든 유효한 문자를 이름의 일부로 간주합니다. 이 경우에는 이전의 모든 것입니다 .. 즉, 쉘은 존재하지 않는 변수를 사용합니다 $totohihi.

일반적으로 쉘 옵션을 사용하여 무슨 일이 일어나고 있는지 확인하는 데 -x도움이 됩니다 .

set -x
touch "$totohihi.log"
    + touch .log

답변2

그렇습니다. $totohihi빈 문자열로 확장된 다음 실행됩니다 touch ".log"(변수가 다른 곳에 설정되지 않았다고 가정). ls -l .log무슨 말인지 보려고 노력하십시오 .

다른 답변에서 언급했듯이 다음 문자가 변수 이름의 일부일 수 있는 경우 변수 이름을 중괄호로 묶어야 하므로 touch "${toto}hihi.log"변수 이름의 문자 및 숫자와 함께 밑줄도 유효하므로 "${toto}_hihi.log"중괄호도 필요합니다.

답변3

$totohihi.log 이름이 있는 변수를 나타냅니다.totohihi

작동하게 하려면 다음을 사용하세요.

${toto}hihi.log

이 stackoverflow 답변에는 좋은 설명이 있습니다.

답변4

쉘은 이것이 $toto값이 123456.인 변수라는 것을 알고 있습니다.
따라서 찾을 때마다 $toto로 대체합니다 123456.
따라서 의 경우 $toto.hihi.log쉘은 as를 연결 연산자로 대체 $toto하고 예상대로 파일을 생성합니다. 123456.

그러나 의 경우 $totohihi.log쉘은 이름이 지정된 변수를 찾을 수 없으므로 $totohihi이를 빈 문자열로 대체하여 파일을 생성합니다 .log. 시작하는 파일 ls -a이나 숨겨진 파일이므로 간단한 명령을 사용하여 볼 수 없는 파일이 있을 수 있습니다 . ls .log.ls

name이라는 파일을 생성해야 한다면 123456hihi.log다른 사람들이 이전 답변에서 언급한 것처럼 $toto중괄호를 넣어야 합니다.${toto}hihi.log

관련 정보