seltsame script-parameter

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

seltsame script-parameter

Beitrag von Pischti » 29.04.2005 12:38:32

hi,
ich hab bei einem script von f-prot folgendes gefunden:

exec /opt/f-prot/f-prot ${@+"$@"}

wenn ich das binary direkt aufrufe bringt das fehler, dass zwischenscript ist also notwendig. was macht aber das
${@+"$@"}

???
gruss pischti
debian stable

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 29.04.2005 13:05:21

Das reicht eigentlich nur die Parameter, mit denen du das Skript aufrufst an f-prot weiter. Wobei mir der Aufbau der Expansion mit dem + und so auch bisserl spanisch vorkommt.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 29.04.2005 13:39:07

nepos hat geschrieben:Das reicht eigentlich nur die Parameter, mit denen du das Skript aufrufst an f-prot weiter. Wobei mir der Aufbau der Expansion mit dem + und so auch bisserl spanisch vorkommt.
nix spanisch - spezielle shell variablen (bash) zerlegt einen Parameter z.B einen Satz in die einzelnen worte und gibt diese Token zurück - das + konkateniert einfach jeweils zwei der worte ....

info siehe http://www.linuxfibel.de/bash.htm abschnitt - spezielle shellvariablen

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 29.04.2005 15:39:55

Schon, aber erkläre mal bitte den Unterschied zwischen '$@' und '${@+"$@"}'. Nach meinen Tests sind nämlich beide identisch.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 29.04.2005 15:42:31

Hm, kommt mir trotzdem bisschen kompliziert vor ;)
Wenn ich nur die Parameter fuer das Shellskript 1:1 durchreichen will oder nicht?

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 29.04.2005 15:43:52

Joghurt hat geschrieben:Schon, aber erkläre mal bitte den Unterschied zwischen '$@' und '${@+"$@"}'. Nach meinen Tests sind nämlich beide identisch.
aha - gut - im kontext mit der zeile oben hab ich es gar nicht versucht ... ich wollte lediglich sagen was $@ macht/ist - aber du kannst ja durchaus Recht haben kommt ja auf den Parameter an aus denen ich die Token heraus nehme - würden wir das ganze script kennen würde man sagen können was passiert

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 29.04.2005 15:46:02

Könnte aber daran liegen das das Script auch mit der Kornshell laufen soll.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 29.04.2005 15:46:46

nepos hat geschrieben:Hm, kommt mir trotzdem bisschen kompliziert vor ;)
Wenn ich nur die Parameter fuer das Shellskript 1:1 durchreichen will oder nicht?
ja wie gesagt - was genau er will oder das script macht kann man aufgrund einer zeile nicht sagen ... naja - that´s life

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 29.04.2005 15:48:33

KBDCALLS hat geschrieben:Könnte aber daran liegen das das Script auch mit der Kornshell laufen soll.
hm - ja ist ein einwand - ohne 100% garantie - ich glaube mich zu erinnern das das zwischen bash und korn in dem fall keinen unterschied macht ...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 29.04.2005 17:20:00

Joghurt hat geschrieben:Schon, aber erkläre mal bitte den Unterschied zwischen '$@' und '${@+"$@"}'. Nach meinen Tests sind nämlich beide identisch.
teste einmal mit einem Argument, welches ein blank enthält

script:

Code: Alles auswählen

#!/bin/sh

function pargs {
  echo "arg 1=$1"
  echo "arg 2=$2"
}

pargs ${@+"$@"}
pargs $@

Code: Alles auswählen

gms@gms1:~$ ./x.sh "abc d"
arg 1=abc d
arg 2=
arg 1=abc
arg 2=d

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 29.04.2005 17:32:31

jepp - die token ergeben sich aus den characters die als IFS definiert sind - ein blank ist ja ein IFS - einfach machen - ein blank ist per default dabei - weitere kann man dazu geben ...

Antworten