2016-06-02 9 views
6

Kann mir bitte jemand helfen, was ich hier falsch mache, mir ein bisschen am Kopf kratzt. Ich weiß nicht viel Perl, nur eine kleine Änderung an einem Skript zu machen.Perl-Benutzereingabe für Unix-Befehl

  $selectedname = <STDIN>; 
      $Nameslist = `grep -i -w '$selectedname'~/file`; 

Es ordnungsgemäß funktioniert das Problem, das ich habe, ist, es sieht aus wie die Variable nicht korrekt eingesetzt wird. Zum Beispiel, wenn ich denselben Befehl mit dem Wort test in der Befehlszeile eintippe, bekomme ich 3 Zeilen, die angezeigt werden. Aber wenn ich dasselbe Wort mit diesem Skript verwende, kommt es leer.

Ich weiß, dass es richtig funktioniert, weil ich * als Eingabe tun kann und es mir die ganze Datei zeigen wird. Es funktioniert einfach nicht mit den eingegebenen Strings.

Jede Hilfe wäre sehr geschätzt, das hat mich wirklich gestampft.

+4

Lines von STDIN werden, gefolgt von Zeilenumbrüchen, können Sie sie mit der chomp Funktion abzustreifen '] (http://perldoc.perl.org/functions/chomp.html) –

+1

Das funktioniert perfekt, danke. – BloodLines

+0

Da einfache Anführungszeichen um die Variable herum verwendet werden, sollte die Variable nicht interpoliert werden? – SilentMonk

Antwort

1

Eigentlich, wenn Sie <STDIN> verwenden, kommt ein neues Zeilenzeichen. Sie müssen also das neue Zeilenzeichen entfernen. Sie können chomp zu entfernen, um die Zeilenendmarke

-Code verwenden: -f chomp [ `perldoc:

$selectedname = <STDIN>; 
    chomp($selectedname); 
    $Nameslist = `grep -i -w '$selectedname'~/file`; 
Verwandte Themen