Rhy*_*yuk 72 bash shell-script
我需要连接两个变量来创建一个带有下划线的文件名。让我们调用我的变量$FILENAME以及$EXTENSION从文件中读取文件名的位置。
FILENAME=Hello
EXTENSION=WORLD.txt
Run Code Online (Sandbox Code Playgroud)
现在...
我尝试了以下但没有成功:
NAME=${FILENAME}_$EXTENSION
NAME=${FILENAME}'_'$EXTENSION
NAME=$FILENAME\\_$EXTENSION
Run Code Online (Sandbox Code Playgroud)
我总是得到某种奇怪的输出。通常下划线在前。
我需要它
echo $NAME
Hello_WORLD.txt
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 91
你可以使用这样的东西:
NAME=$(echo ${FILENAME}_${EXTENSION})
Run Code Online (Sandbox Code Playgroud)
这也有效:
NAME=${FILENAME}_${EXTENSION}
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 15
您的:
NAME=${FILENAME}_$EXTENSION
NAME=${FILENAME}'_'$EXTENSION
Run Code Online (Sandbox Code Playgroud)
都很好,所以会:
NAME=${FILENAME}_${EXTENSION}
NAME=$FILENAME'_'$EXTENSION
NAME=$FILENAME\_$EXTENSION
NAME=$FILENAME"_$EXTENSION"
Run Code Online (Sandbox Code Playgroud)
(但肯定不是 因为它使用NAME=$(echo ${FILENAME}_${EXTENSION})echo与该split+glob运营商)。
NAME=$FILENAME_$EXTENSION
Run Code Online (Sandbox Code Playgroud)
将是相同的:
NAME=${FILENAME_}${EXTENSION}
Run Code Online (Sandbox Code Playgroud)
as _(与\or相反')是变量名中的有效字符。
你的问题是你有用 CRLF 而不是 LF 分隔的行,这意味着这些变量内容以 CR 字符结尾。
CR 字符在写入终端时告诉终端将光标移动到行首。因此,Hello<CR>_WORLD.TXT<CR>当发送到终端时将显示为_WORLD.TXT(覆盖Hello)。