2017-09-27 4 views
0

My bash Code file.sh:
Bash String-Verkettung produzieren seltsame Ergebnisse

username=$1 
pkgpath="/home/${username}_tmp.txt" 
echo $username 
echo $pkgpath 

nun das Skript mit dem Befehl ausführen bash file.sh abc sollte das Ergebnis produzieren:

abc 
/home/abc_tmp.txt 

Aber die Ausgabe erhalte ich ist:

abc 
_tmp.txtc 

Kann jemand erklären, warum dieses Verhalten auftritt und wie man das gewünschte Ergebnis erzielt?

EDIT
Ich mag würde, dass pkgpath="/home/${username}" mich aber pkgpath="${username}_tmp.txt"_tmp.txt (komisch) gibt mir läuft /home/abc (gewünschte) gibt mit ganz zu schweigen.

+0

Willst du sagen, dass am Ende ein zusätzliches Zeichen "c" angehängt wird, wenn es nicht wahrscheinlich ist? (abgesehen von der Variablen Wert nicht erweitert). Führen Sie dieses Skript in der Befehlszeile aus? Hast du das Skript zufällig in einem Windows-Editor (Notepad ++) bearbeitet? – Inian

+0

Ich habe es einfach auf meinen Rechner kopiert und eingefügt und es funktionierte einwandfrei. – Will

+0

Eigentlich war ich gerade dabei, mich in meinen RHEL5-Desktop einzuloggen, aber das spielte keine Rolle, da ich direkt auf dem Desktop lief und die gleichen Ergebnisse – iammrmehul

Antwort

0

Sieht aus, als ob Sie irgendwie ein Wagenrücklaufzeichen nach abc einfügen, wenn Sie den Befehl bash file abc ausführen. Der Schuldige ist wahrscheinlich entweder Ihr Terminal, oder Sie kopieren das Einfügen des Befehls und enthalten ^M, ohne es zu merken.

Also was Bash in der zweiten Zeile ausgibt ist wirklich /home/abc^M_tmp.txt, die als _tmp.txtc gerendert wird. Sie können dies leicht überprüfen, indem Sie die Ausgabe Ihres Befehls an less -R übergeben.

+0

Ja, es gibt tatsächlich ein^M. Bitte, wie kann ich das beheben – iammrmehul

+0

Nach Bezugnahme auf diese Antwort: https://unix.stackexchange.com/questions/56024/bash-korn-shell-script-edited-on-windows-throws-error-m-not- found Ich habe gerade Unix-Zeile Ende von Windows-Zeile in sublime Text endet und Problem wurde gelöst! – iammrmehul