用下划线连接两个变量

用下划线连接两个变量

我需要连接两个变量来创建一个带有下划线的文件名。让我们调用我的变量$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 _(与\or相反')是变量名中的有效字符。

您的问题是您的行是用 CRLF 而不是仅 LF 分隔的,这意味着这些变量内容以 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

相关内容