Nowe posty

Autor Wątek: Podwójny cudzysłów " "" " i problem  (Przeczytany 6374 razy)

idz_mnie_z_tym

  • Gość
Podwójny cudzysłów " "" " i problem
« dnia: 2009-11-09, 14:40:52 »
piszę coś takiego w skrypcie:

zmienna=" -name "$nazwa" "
find $zmienna

jak zrobię w ten sposób to zadziała tak jakby $nazwa nie była wzięta w cudzysłów

co mogę zrobić, żeby zrobić cudzysłów w cudzysłowie i było to prawidłowo interpretowane?

arctgx

  • Gość
Podwójny cudzysłów " "" " i problem
« Odpowiedź #1 dnia: 2009-11-09, 15:29:40 »
W tej sytuacji chyba najpraktyczniej zamaskować go odwrotnym ukośnikiem:
zmienna=" -name \\"$nazwa\\" "
Ed: patrz man bash, rozdział CYTOWANIE (QUOTING w angielskiej wersji).

Przy okazji tego, coś do wypróbowania: definicja
man0 ()
{
local STRONA="${1}"
local SLOWO="${2}"
local MAN_LANG=${3:-pl}
man --locale="${MAN_LANG}" --pager="less --ignore-case --pattern=\\"${SLOWO}\\"" "$STRONA"
}
i użycie:
type man0
locale
man0 bash '^(CYTOWANIE|QUOTING)'
man0 bash '^(CYTOWANIE|QUOTING)' pl
man0 bash '^(CYTOWANIE|QUOTING)' C

idz_mnie_z_tym

  • Gość
Podwójny cudzysłów " "" " i problem
« Odpowiedź #2 dnia: 2009-11-09, 16:47:32 »
tylko, że ja właśnie nie chcę go maskować

-find -name $nazwa
-find -name "$nazwa"

działa inaczej, a mi zależy na tej drugiej możliwości, ale nie potrafię umieścić tego pod zmienną
1. zmienna=" -name "$nazwa" "
2. zmienna=" -name \\"$nazwa\\" "

find $zmienna

w obu przypadkach find działa tak jak -find -name $nazwa
a nie tak jak -find -name "$nazwa"

Krzysiek1990

  • Gość
Podwójny cudzysłów " "" " i problem
« Odpowiedź #3 dnia: 2009-11-09, 17:58:15 »
Nie specjalnie znam się na kodowaniu ale czytałem gdzieś przy okazji zaznajamiania się z kodowaniem, że jeśli chce się używać dwóch cudzysłowiów, można użyć apostrofu (').
Jednakże nie jestem żadnym koderem a znam kilka języków bardziej ogólnie, ze względu na brak czasu, który mnie jednak ogranicza ;/.

Sam jestem zainteresowany rozwiązaniem.

ra-v

  • Gość
Podwójny cudzysłów " "" " i problem
« Odpowiedź #4 dnia: 2009-11-09, 20:19:34 »
@Krzysiek1990 & @założyciel tematu -   wpszcie
test1="xyz"
echo '"test": $test1'
echo "\\"test\\": $test1"
zobaczysz w czym rzecz, jakie są róznice

arctgx

  • Gość
Podwójny cudzysłów " "" " i problem
« Odpowiedź #5 dnia: 2009-11-09, 21:07:33 »
Też nie mam pomysłu na to jak przy Twoim założeniu zachować cytowaną spację w nazwie. Dodawałem maskowanie spacji odwrotnym ukośnikiem w stylu ${nazwa// /$'\\x20'}", ${nazwa// /\\ }" czy N2=`echo $NAZWA | sed 's/ /\\\\\\\\ /g'`, ale i tak w rezultacie nie umykała ona interpretacji.

Testem do sprawdzania podziału na słowa może być użycie pętli typu for i in $zmienna albo kobyła strace -e trace=execve find $zmienna.

Możesz pobawić się separatorem IFS, by zmienić podział na słowa.

Moim zdaniem, samo założenie brania wszystkich opcji w jedną zmienną nie jest dobre. Jaki problem w skrypcie użyć kilku osobnych zmiennych, szczególnie osobnej dla szukanego wyrażenia? Jeśli jednak upierasz się przy niej, spróbuj zmiennej tablicowej:

NAZWA="a b"
OPCJE=("-name")
OPCJE[${#OPCJE[@]}]="$NAZWA"
for i in "${OPCJE[@]}"; do echo "$i"; done
find . "${OPCJE[@]}"