밑줄이 있는 파일 이름을 만들려면 두 변수를 연결해야 합니다. 내 변수를 호출 $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$()_$HHMMSS
YYYYMMDD_HHMMSS 형식의 타임스탬프가 포함된 파일 이름을 생성합니다. 중간 부분은 $()
아무것도 반환하지 않으며 두 변수를 분리합니다.
저는 time
이 방법과 위의 방법 중 일부를 사용하여 할당을 측정했는데 $YYYYMMDD$()_$HHMMSS
, 제가 사용했던 이전 서버에서 모두 0ms를 보고했습니다. 성능에는 문제가 없을 것 같습니다.
답변4
NAME=${FILENAME}_$EXTENSION
물론 이것은 최선의 답변이며 허용되는 답변이어야 합니다. 그러나 이에 맞춰사용자 208145의 답변, 대안은 다음과 같습니다.
UNDERSCORE='_'
NAME=$FILENAME$UNDERSCORE$EXTENSION