Portál AbcLinuxu, 30. dubna 2025 18:20
Kašle to na ně.
cut -c2 <<<x"$1"
?
-
.
Hledají se přepínače pro grep (tj. znaky co začínají na -). V bash man stránce se <<< jmenuje "here string". Proč se před to dává xko? Zatím nevím, někdo to navrhl v komentáři (viz. zdroj), že prý to řeší problem s mezerami uvnitř názvů souborů, zatím sem nepřišel na to proč. :|
prý to řeší problem s mezerami uvnitř názvů souborů
To by mě zajímalo kde jsi to vyčetl, v diskuzi to vysvětlili jasně:
2. A small bug: if you pass a -e or -n as grep options, then the echo in the test of the first while loop thinks that it's an option for itself, for example echo -e outputs just a blank line.
Tj. pokud $1 bude obsahovat volby, které jsou dostupné i v echo
, tak si je vezme za své právě echo
. Příklad:
$ option="-n" $ echo $option $ echo x$option x-n
Pro udržení kontextu, bavíme se o:
while [ `echo x$1 | cut -c2` == "-" ]; do
U následujícího provedení má x
jiný význam, pokud by $1
byl prázdný řetězec vypsal by skript chybové hlášení [: ==: unary operator expected
, protože na levé straně porovnání by nebylo nic:
while [[ $(cut -c2 <<<x"$1") == "-" ]]; do
Ale když použijeme uvozovky, tak se můžeme zbavit x
i tady (dávat do uvozovek i $1
je zbytečné):
while [ "$(cut -c2 <<<$1)" == "-" ]; do
Nebo to rovnou můžeme napsat bez zbytečného cut
:
while [ ${1:0:1} == "-" ]; do
Oh. Upraveno. Omlouvám se. Přiznám se, že jsem ty komentáře jenom zhruba prolít.
if [[ $# -gt 1 ]]; then GREP_OPTIONS="-H $GREP_OPTIONS" fi... na ...
[ $# -gt 1 ] && REP_OPTIONS="-H $GREP_OPTIONS"No a ten posledný cyklus čo ide po súboroch neberie názvy s medzerami. Asi by bolo lepšie použiť:
ls ... | while read FILE; do
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.