Re: a sed question

Liste des GroupesRevenir à cu shell 
Sujet : Re: a sed question
De : nn.throttle (at) *nospam* xoxy.net (Helmut Waitzmann)
Groupes : comp.unix.shell
Date : 21. Dec 2024, 19:20:20
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <83wmfsj3tn.fsf@helmutwaitzmann.news.arcor.de>
References : 1 2 3
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
 Salvador Mirzo <smirzo@example.com>:
Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:
>
On 18.12.2024 20:46, Salvador Mirzo wrote:
>
First (before I forget it) change your string comparison '<' to the
numerical comparison operator '-lt' as in:   test $# -lt 2 && usage
Otherwise, if you get used to using the wrong operator, you may get
subtle errors in future if you continue that habit.
>
Changed.  Why is it the wrong operator?
 '<' compares two strings lexically, whereas '-lt' compares two  numbers numerically.  Some examples:
 1 < 2 ==> true
 2 < 2 ==> false
 3 < 2 ==> false
 10 < 2 ==> true, probably not your intention.
 1 -lt 2 ==> true
 2 -lt 2 ==> false
 3 -lt 2 ==> false
 10 -lt 2 ==> false

It seems it's not the standard one---checking just now on the
POSIX.1 spec.
 The recent POSIX standard knows of the '<' operator, see
 <https://pubs.opengroup.org/onlinepubs/9799919799/utilities/test.html#tag_20_121_05>.

Also note that using $* may not work correctly (e.g. depending on
filenames [containing spaces] used). The safe form is a quoted  "$@"
>
I learned something here.
>
--8<-------------------------------------------------------->8---
$ cat script.sh
#!/bin/sh
echo dollar-star $*
./script dollar-star $*
>
echo quoted-dollar-star "$*"
./script "$*"
>
echo dollar-at $@
./script $@
>
echo quoted-dollar-at "$@"
./script "$@"
>
$ cat script.c
#include <stdio.h>
>
int main(int argc, char *argv[]) {
  printf("\nfull cmdline: ");
  for (int i = 0; i < argc; ++i) {
    printf("%s ", argv[i]);
  }
  printf("\nargs: %d\n", argc);
  for (int i = 0; i < argc; ++i) {
    printf("arg %d: %s\n", i, argv[i]);
  }
  return 0;
}
--8<-------------------------------------------------------->8---
>
$ ./script.sh 1 2 "th ree"
dollar-star 1 2 th ree
>
full cmdline: ./script dollar-star 1 2 th ree
args: 6
arg 0: ./script
arg 1: dollar-star
arg 2: 1
arg 3: 2
arg 4: th
arg 5: ree
quoted-dollar-star 1 2 th ree
>
full cmdline: ./script 1 2 th ree
args: 2
arg 0: ./script
arg 1: 1 2 th ree
dollar-at 1 2 th ree
>
full cmdline: ./script 1 2 th ree
args: 5
arg 0: ./script
arg 1: 1
arg 2: 2
arg 3: th
arg 4: ree
quoted-dollar-at 1 2 th ree
>
full cmdline: ./script 1 2 th ree
args: 4
arg 0: ./script
arg 1: 1
arg 2: 2
arg 3: th ree
$
 So using "$@" is the only way to have the shell pass its  positional parameters unmodified (i. e. neither glued together  nor split at internal white space (more precise: split according  to the contents of the IFS shell parameter)) to commands it  invokes.
Date Sujet#  Auteur
18 Dec20:46 * a sed question48Salvador Mirzo
18 Dec21:12 +- Re: a sed question1John-Paul Stewart
19 Dec02:14 +* Re: a sed question16Ralf Damaschke
19 Dec13:05 i`* Re: a sed question15Salvador Mirzo
20 Dec01:55 i `* Re: a sed question14Ralf Damaschke
20 Dec13:44 i  `* Re: a sed question13Kenny McCormack
21 Dec01:17 i   `* Re: a sed question12Ralf Damaschke
21 Dec04:09 i    `* Re: a sed question11Kaz Kylheku
21 Dec04:36 i     +* sed... (Was: a sed question)8Kenny McCormack
21 Dec04:57 i     i`* Re: sed... (Was: a sed question)7Kaz Kylheku
21 Dec15:38 i     i +* Re: sed... (Was: a sed question)4Janis Papanagnou
21 Dec17:29 i     i i`* Re: sed... (Was: a sed question)3Janis Papanagnou
21 Dec23:23 i     i i `* Re: sed...2Keith Thompson
22 Dec00:33 i     i i  `- Re: sed...1Janis Papanagnou
21 Dec22:46 i     i `* Re: sed... (Was: a sed question)2Lars Poulsen
22 Dec22:22 i     i  `- Re: sed... (Was: a sed question)1Kaz Kylheku
21 Dec15:35 i     +- Re: a sed question1Janis Papanagnou
22 Dec01:43 i     `- Re: a sed question1Ralf Damaschke
20 Dec15:55 +* Re: a sed question18Janis Papanagnou
20 Dec16:11 i+* Checking for right # of args in a shell script (Was: a sed question)3Kenny McCormack
20 Dec16:49 ii`* Re: Checking for right # of args in a shell script (Was: a sed question)2Janis Papanagnou
20 Dec18:43 ii `- Re: Checking for right # of args in a shell script (Was: a sed question)1Kenny McCormack
21 Dec13:17 i+* Re: a sed question13Salvador Mirzo
21 Dec16:19 ii+* Re: a sed question7Janis Papanagnou
21 Dec22:41 iii`* Re: a sed question6Keith Thompson
22 Dec00:50 iii `* Re: a sed question5Janis Papanagnou
22 Dec01:26 iii  +* Re: a sed question2Keith Thompson
22 Dec01:41 iii  i`- Re: a sed question1Janis Papanagnou
22 Dec01:31 iii  `* Re: a sed question2Lawrence D'Oliveiro
22 Dec02:06 iii   `- Re: a sed question1Janis Papanagnou
21 Dec16:34 ii+* Re: a sed question4Andy Walker
21 Dec17:14 iii+- Re: a sed question1Janis Papanagnou
21 Dec19:21 iii`* Re: a sed question2Salvador Mirzo
21 Dec20:48 iii `- Re: a sed question1Janis Papanagnou
21 Dec19:20 ii`- Re: a sed question1Helmut Waitzmann
22 Dec19:23 i`- Re: a sed question1Janis Papanagnou
21 Dec15:13 `* Re: a sed question12Ed Morton
21 Dec22:09  `* Re: a sed question11Lawrence D'Oliveiro
22 Dec01:02   +* Re: a sed question8Janis Papanagnou
22 Dec01:28   i`* Re: a sed question7Lawrence D'Oliveiro
22 Dec01:36   i +* Re: a sed question5Keith Thompson
22 Dec02:52   i i`* Re: a sed question4Lawrence D'Oliveiro
22 Dec06:09   i i `* Re: a sed question3Keith Thompson
22 Dec06:56   i i  `* Re: a sed question2Lawrence D'Oliveiro
22 Dec07:55   i i   `- Re: a sed question1Keith Thompson
22 Dec02:22   i `- Re: a sed question1Janis Papanagnou
22 Dec02:09   +- Re: a sed question1Kenny McCormack
22 Dec21:03   `- Re: a sed question1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal