shell 没有替换变量值

shell 没有替换变量值

我的脚本有什么问题吗?

echo "Environment validation started"
ID=`getValueFromFile "ID"`
echo $ID
FAILLOG=$HOME/$ID/logs/1.log
echo $FAILLOG
echo $HOME/$ID/logs/1.log
>$FAILLOG 

输出:

Environment validation started
JASONID
/logs/1.log
/logs/1.log
/logs/1.log: No such file or directory/home/gol/JASONID

理想情况下 echo 应该给出类似的东西,对吧?

/home/gol/JASONID/logs/1.log

添加 bash -vx 输出

+ echo $'JASONID\r'
JASONID
FAILLOG=$HOME/$ID/logs/1.log
+ FAILLOG=$'/home/gol/JASONID\r/logs/1.log'
echo $FAILLOG
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log
echo $HOME/$ID/logs/1.log
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log

答案1

作为@埃里克雷诺夫注释,如果最后ID有一个回车符(\r),它将通过将光标移动到字符串的开头来破坏输出,之后其余部分将覆盖前导部分。

使用printf %q查看特殊字符:

ID=$'abcdef\r'
echo "$ID/123"
printf "%q\n" "$ID/123"

我们得到:

/123ef
$'abcdef\r/123'

您可以使用参数扩展来删除最终的 CR:

ID=${ID%$'\r'}
echo "$ID/123"
printf "%q\n" "$ID/123"

$'..'是非标准 IIRC,但它可以在 Bash 等中使用。)

相关内容