두 변수를 밑줄로 연결

두 변수를 밑줄로 연결

밑줄이 있는 파일 이름을 만들려면 두 변수를 연결해야 합니다. 내 변수를 호출 $FILENAME하고 $EXTENSION파일에서 파일 이름을 읽을 위치를 지정해 보겠습니다 .

FILENAME=Hello
EXTENSION=WORLD.txt

지금...

나는 성공하지 않고 다음을 시도했습니다.

NAME=${FILENAME}_$EXTENSION
NAME=${FILENAME}'_'$EXTENSION
NAME=$FILENAME\\_$EXTENSION

나는 항상 이상한 결과를 얻습니다. 일반적으로 밑줄이 먼저 옵니다.

난 그게 필요해

echo $NAME
Hello_WORLD.txt

답변1

다음과 같이 사용할 수 있습니다.

NAME=$(echo ${FILENAME}_${EXTENSION})

이것은 또한 작동합니다:

NAME=${FILENAME}_${EXTENSION}

답변2

당신의:

NAME=${FILENAME}_$EXTENSION
NAME=${FILENAME}'_'$EXTENSION

둘 다 괜찮으므로 다음과 같습니다.

NAME=${FILENAME}_${EXTENSION}
NAME=$FILENAME'_'$EXTENSION
NAME=$FILENAME\_$EXTENSION
NAME=$FILENAME"_$EXTENSION"

(하지만 물론아니요 NAME=$(echo ${FILENAME}_${EXTENSION})~처럼그것은 사용한다echo그리고split+glob운영자).

NAME=$FILENAME_$EXTENSION

동일할 것입니다:

NAME=${FILENAME_}${EXTENSION}

as _( \또는 반대 ')는 변수 이름에 유효한 문자입니다.

문제는 행이 LF 대신 CRLF로 구분되어 있다는 것입니다. 이는 변수 내용이 CR 문자로 끝나는 것을 의미합니다.

터미널에 쓸 때 CR 문자는 터미널에 커서를 줄의 시작 부분으로 이동하라고 지시합니다. 따라서 Hello<CR>_WORLD.TXT<CR>터미널로 전송되면 _WORLD.TXT(덮어쓰기 Hello)로 표시됩니다.

답변3

${FILENAME}_${EXTENSION}위에서 언급한 구문 으로 전환했습니다 .

$()두 변수를 밑줄로 연결해야 할 때 사용했습니다. 예를 들어 $YYYYMMDD$()_$HHMMSSYYYYMMDD_HHMMSS 형식의 타임스탬프가 포함된 파일 이름을 생성합니다. 중간 부분은 $()아무것도 반환하지 않으며 두 변수를 분리합니다.

저는 time이 방법과 위의 방법 중 일부를 사용하여 할당을 측정했는데 $YYYYMMDD$()_$HHMMSS, 제가 사용했던 이전 서버에서 모두 0ms를 보고했습니다. 성능에는 문제가 없을 것 같습니다.

답변4

Stefan Chazeras의 답변,

NAME=${FILENAME}_$EXTENSION

물론 이것은 최선의 답변이며 허용되는 답변이어야 합니다. 그러나 이에 맞춰사용자 208145의 답변, 대안은 다음과 같습니다.

UNDERSCORE='_'
NAME=$FILENAME$UNDERSCORE$EXTENSION

관련 정보