Discussion:
bash quotanje
(prestaro za odgovor)
Aleksandar Ivanisevic
2010-11-12 14:19:29 UTC
Permalink
do ludila ce me dovest pa molim pomoc:

$ cat test.sh
#!/bin/bash -x

funkcija() {

for arg; do
DATA="$DATA --data $arg"
done

nekakomanda $DATA

}


funkcija x=1 y="2 3"


$ ./test.sh
+ funkcija x=1 'y=2 3'
+ for arg in '"$@"'
+ DATA=' --data x=1'
+ for arg in '"$@"'
+ DATA=' --data x=1 --data y=2 3'
+ nekakomanda --data x=1 --data y=2 3
./test.sh: line 9: nekakomanda: command not found
Exit code: 127

dakle zelim da mi se "nekakomanda" pozove kao

nekakomanda --data x=1 --data y="2 3"

tj. da ako postoji spejs u valueu da se on nekako quota funkciji
i dalje komandi.

Bilo kakva sintaksa i u pozivu i u samoj funkciji mi je prihvatljiva,
nisam izbirljiv
--
Ti si arogantan, prepotentan i peglaš vlastitu frustraciju. -- Ivan
Tišljar, hr.comp.os.linux
Nikola Ostrun
2010-11-12 19:43:06 UTC
Permalink
Post by Aleksandar Ivanisevic
$ cat test.sh
#!/bin/bash -x
funkcija() {
for arg; do
DATA="$DATA --data $arg"
done
nekakomanda $DATA
}
funkcija x=1 y="2 3"
$ ./test.sh
+ funkcija x=1 'y=2 3'
+ DATA=' --data x=1'
+ DATA=' --data x=1 --data y=2 3'
+ nekakomanda --data x=1 --data y=2 3
./test.sh: line 9: nekakomanda: command not found
Exit code: 127
dakle zelim da mi se "nekakomanda" pozove kao
nekakomanda --data x=1 --data y="2 3"
tj. da ako postoji spejs u valueu da se on nekako quota funkciji
i dalje komandi.
Bilo kakva sintaksa i u pozivu i u samoj funkciji mi je prihvatljiva,
nisam izbirljiv
Nije baš da se kvota samo space, ali pretpostavljam da dođe na
isto:

$ cat t.sh
#!/bin/bash -x

funkcija() {
(( i = 0 ))
for arg;
do
W[i++]=$arg
done

nekakomanda "${W[@]}"
}

funkcija x='1 3' y="2 3 4"

$ ./t.sh
+ funkcija 'x=1 3' 'y=2 3 4'
+ (( i = 0 ))
+ for arg in '"$@"'
+ W[i++]='x=1 3'
+ for arg in '"$@"'
+ W[i++]='y=2 3 4'
+ nekakomanda 'x=1 3' 'y=2 3 4'
./t.sh: line 9: nekakomanda: command not found
$ bash --version
GNU bash, version 4.0.38(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$

bash sucks ;)
--
VI = Virtually Incomprehensible.
Nikola Ostrun
2010-11-12 19:47:42 UTC
Permalink
Post by Nikola Ostrun
Post by Aleksandar Ivanisevic
nekakomanda --data x=1 --data y="2 3"
[...]
Post by Nikola Ostrun
+ nekakomanda 'x=1 3' 'y=2 3 4'
Hm... niškoristi...
--
VI = Virtually Incomprehensible.
Nikola Ostrun
2010-11-12 20:12:16 UTC
Permalink
Post by Nikola Ostrun
Post by Nikola Ostrun
Post by Aleksandar Ivanisevic
nekakomanda --data x=1 --data y="2 3"
[...]
Post by Nikola Ostrun
+ nekakomanda 'x=1 3' 'y=2 3 4'
Hm... niškoristi...
A opet...

$ cat t.sh
#!/bin/bash -x

funkcija() {
(( i = 0 ))
W[i++]=nekakomanda
for arg;
do
W[i++]="--data ${arg// /\\ }"
done

eval ${W[@]}
}

funkcija x=1 y="2 3 4"

$ ./t.sh
+ funkcija x=1 'y=2 3 4'
+ (( i = 0 ))
+ W[i++]=nekakomanda
+ for arg in '"$@"'
+ W[i++]='--data x=1'
+ for arg in '"$@"'
+ W[i++]='--data y=2\ 3\ 4'
+ eval nekakomanda --data x=1 --data 'y=2\' '3\' 4
++ nekakomanda --data x=1 --data 'y=2 3 4'
./t.sh: line 11: nekakomanda: command not found
$
--
VI = Virtually Incomprehensible.
Aleksandar Ivanisevic
2010-11-12 22:14:14 UTC
Permalink
Post by Nikola Ostrun
A opet...
$ cat t.sh
#!/bin/bash -x
funkcija() {
(( i = 0 ))
W[i++]=nekakomanda
for arg;
do
W[i++]="--data ${arg// /\\ }"
done
}
funkcija x=1 y="2 3 4"
$ ./t.sh
+ funkcija x=1 'y=2 3 4'
+ (( i = 0 ))
+ W[i++]=nekakomanda
+ W[i++]='--data x=1'
+ W[i++]='--data y=2\ 3\ 4'
+ eval nekakomanda --data x=1 --data 'y=2\' '3\' 4
++ nekakomanda --data x=1 --data 'y=2 3 4'
./t.sh: line 11: nekakomanda: command not found
$
Hvala majstore, ovo je vec druga piva koju ti dodjem ako sam dobro
izbrojao ;)

elem, meni je zapravo trebalo quotanje samo valuea, tako da sam zavrsio na:

i=0
W[i++]=nekakomanda
for arg;
do
key=${arg%%=*}
val=${arg##*=}
W[i++]="--data $key=${val// /\\ }"
done

eval ${W[@]}

Loading...