7 Stimmen

Verkettung von Zeichenketten in der Bash

Ich habe in einem Bash-Skript:

for i in `seq 1 10`
do
   read AA BB CC <<< $(cat file1 |  grep DATA)
   echo ${i}
   echo ${CC}
   SORT=${CC}${i}
   echo ${SORT}
done

i" ist also eine ganze Zahl, und CC ist eine Zeichenkette wie "TODAY".

Ich würde dann gerne in SORT , "HEUTE1", usw.

Aber ich bekomme "1ODAY", "2ODAY" und so

Wo liegt der Fehler?

Gracias

7voto

tonio Punkte 10079

Sie sollten versuchen

SORT="${CC}${i}"

Stellen Sie sicher, dass Ihre Datei nicht " \r ", die genau am Ende von $CC enden würde. Dies könnte erklären, warum Sie "1ODAY" erhalten.

Versuchen Sie es mit |tr ' \r ' '' nach dem Befehl cat

1voto

ghostdog74 Punkte 305138

Versuchen Sie

   for i in {1..10}
    do
      while read -r line
      do
        case "$line" in
         *DATA* ) 
             set -- $line
             CC=$3
             SORT=${CC}${i}
             echo ${SORT}
        esac
      done <"file1" 
    done

Andernfalls zeigen Sie ein Beispiel für file1 und Ihre gewünschte Ausgabe

1voto

Charles Stewart Punkte 11393

Ghostdog hat Recht: Mit der Option -r vermeidet read potentielle Schrecken, wie CRLFs. Die Verwendung von Arrays macht die Option -r angenehmer:

for i in \`seq 1 10\`
do
   read -ra line <<< $(cat file1 |  grep DATA)
   CC="${line\[3\]}"
   echo ${i}
   echo ${CC}
   SORT=${CC}${i}
   echo ${SORT}
done

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X