シェルは変数の値を置き換えません

シェルは変数の値を置き換えません

私のスクリプトに問題がありますか?

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

〜のように@EricRenov末尾に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などで動作します。)

関連情報