Chyba nie wiem, jak to zrobić ”i„ testy ”. Chciałem się upewnić, że istnieje argument, który działał dobrze [ -e $VAR ]
, ale okazuje się, że był również oceniany jako prawdziwy na pustym łańcuchu; których nie chcę.
Jak ja i je razem? A może jest jeszcze jeden test, który spełnia to, czego chcę?
bash
; Aby jednak w pełni skorzystać z „bashizmów”, patrz odpowiedź @ paxdiablo.-a
.Z strony
bash
podręcznika:W przypadku wyrażeń jedną z opcji jest:
Możesz więc
and
połączyć je w następujący sposób (-n
jest odwrotnie-z
, abyśmy mogli się go pozbyć!
):Jednak nie sądzę, aby było to potrzebne w tym przypadku,
-e xyzzy
jest prawdą, jeślixyzzy
plik istnieje i może dość łatwo obsługiwać puste ciągi. Jeśli tego właśnie chcesz, to tak naprawdę nie potrzebujesz-z
niepustego czeku:Innymi słowy, po prostu użyj:
źródło
[[ -e "$var" ]] && echo "'$var' exists"
źródło
POSIX
nie definiuje zachowanie[
złożonych zestawów testów, powinniśmy unikać-a
lub-o
z[
. Przeczytałem to tutaj .bash
tag i nie wspomina o POSIX, więc zamieszczam tę wersję, która działa podbash
i kilka innych nowoczesnych powłok.bash
lub innych nowoczesnych powłok, jest nawet mniej powodów, aby polecać-a
.[ "$var1" -o "$var2" ]
; jeślivar1=(
ivar2=)
, to mamy test na-o
to, czy nie jest pusty, a nie na jedno z nichvar1
czyvar2
jest pusty. Ten rodzaj dwuznaczności jest jedynym uzasadnionym powodem tegox$var
idiomu we współczesnych (tj. Po latach 90.)test
komendach z poprawnym cytowaniem i ten idiom musi zginąć w ogniu.Po prostu podaj swoją zmienną:
To ocenia,
[ -e "" ]
czy$VAR
jest pusty.Twoja wersja nie działa, ponieważ ocenia
[ -e ]
. Teraz w tym przypadku bash po prostu sprawdza, czy pojedynczy argument (-e
) jest niepustym łańcuchem.Z strony podręcznika:
(Ponadto to rozwiązanie ma dodatkową zaletę pracy z nazwami plików zawierającymi spacje)
źródło
Znalazłem odpowiedź. Dzięki za sugestie!
Jakieś komentarze na ten temat? Grep wydaje się nieefektywny dwa razy, ale działa ...
źródło