2016-06-22 11 views
0

Es ergibt sich als "x: Befehl nicht gefunden", wobei x das bereitgestellte Argument $ @ ist. Warum funktioniert das nicht?Argumente/Variablen in Bash-Skript-Funktion

Muss nur den ersten Buchstaben des Arguments erhalten (nur einer ist angegeben).

+3

Willkommen auf Stack-Überlauf gespeichert sind, auszuführen. Bitte lies bald die [Über] -Seite und die [Ask] -Seite. Sie sprechen über eine Bash-Funktion; Sie haben keine Bash-Funktion gezeigt - vielleicht haben Sie Skript gemeint, auch im Titel erwähnt. Sie haben nicht gezeigt, wie der Code aufgerufen wird. Es scheint, dass Sie ein Argument "x" an ihn übergeben haben und auf Ihrem Computer kein Programm namens "x" vorhanden ist. Vielleicht meintest du 'firstChar = $ (echo" $ arg "| cut -c 1)'? Aber wenn es Bash ist, können Sie besser mit [Parametererweiterungen] (https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion) wie 'firstChar =" $ { arg: 0: 1} "'. –

+1

Das Zuweisen von '$ @' zu einem einzelnen Parameter verhindert die Verwendung von '$ @'. Entweder ist "$ 1" ausreichend oder Ihr Code ist tatsächlich defekt. Was ist der erwartete Wert von $ @? – chepner

Antwort

0

Sie müssen Ihr Skript beheben, zweite Zeile hat ein Problem. Hier ist die korrigierte ein, das funktioniert ..

arg="[email protected]" 
echo $arg 
firstChar=(`echo "$arg" | cut -c 1`) 
echo $firstChar 
+0

Oh mein Gott, danke. Ich habe in der Vergangenheit einige zufällige Dinge wie 3 Stunden probiert. Bashs Syntax ist schrecklich. –

+0

Die 'firstChar'-Anordnung erscheint bestenfalls ungerade. – tripleee

+0

Leider ist das gebrochen und semantisch falsch. Broken: Versuchen Sie es mit einem Argument, das gleich '-n', '-e' oder' -E' ist oder einem Newline ('$' \ n'') - beheben Sie das, indem Sie' echo' durch 'printf' ersetzen. Es ist semantisch falsch, da du ein _array_ 'firstChar' erstellst ... –

-1

Sie eval verwenden sollten Code in Variable

arg="[email protected]" 
firstChar=$(eval "$arg" | cut -c 1) 
+0

Nein, das ergibt" Befehl nicht gefunden " –