So ordnen Sie das Ergebnis von sed der Variablen zu

9

Unten finden Sie eine vollständige Kopie einer Demo, mit der ich herausfinden möchte, wie der sedBefehl zum Entfernen der Leerzeichen in einem Personennamen abgerufen und komprimiert wird, um keine Leerzeichen zu haben.

Sobald dies erledigt ist, möchte ich es der Variablen zuweisen und compes später im Skript wiederverwenden. Hier versuche ich es nur bis echozum Standard, damit ich sehen kann, dass es funktioniert.

Wenn ich das Skript ausführe und meinen Namen eingebe, wird als Ronald McDonaldErgebnis eine RonaldMcDonald}geschweifte Klammer am Ende seines Namens oder was auch immer ich eingebe, zurückgegeben.

Wie kann ich es zum Laufen bringen, damit das Ergebnis nicht }an die Rückseite des zugewiesenen Textes angehängt wird?

#!/bin/bash

function readName {
    echo "Enter your full name:"
    read fullName
    clear
}    # end readName

function cmprsName {
    comp={ echo "$fullName" } | sed 's/ //g'
}    # end cmprsName

function sayItNow {
    echo $comp
}    # end sayItNow

function allTogether {
    readName
    cmprsName
    sayItNow
}    #end allTogether

case $1 in
        -h | --help )           allTogether
                                exit
                                ;;
        * )                     echo "$0 -h"
                                exit 1
esac
Danijel-James W.
quelle

Antworten:

13

Sie müssen dafür die Befehlssubstitution verwenden, dh anstelle von

comp={ echo "$fullName" } | sed 's/ //g'

etwas wie

comp=$(echo "$fullName"  | sed 's/ //g')

oder

comp=`echo "$fullName"  | sed 's/ //g'`
maxschlepzig
quelle
4
Es sollte vielleicht beachtet werden, dass die Syntax aus Gründen der Lesbarkeit und Verschachtelung $(..)der älteren `..`Syntax vorgezogen wird .
Evilsoup