help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: printf '%s\n' "$@" versus <<< redirection


From: goncholden
Subject: Re: printf '%s\n' "$@" versus <<< redirection
Date: Sun, 19 Feb 2023 16:25:13 +0000

------- Original Message -------
On Sunday, February 19th, 2023 at 3:17 AM, Greg Wooledge <greg@wooledge.org> 
wrote:


> On Sat, Feb 18, 2023 at 10:46:08AM +0000, goncholden wrote:
> 
> > My intention is to use prinf line by line on arguments containing newlines. 
> > With a newline also introduced between arguments $1 $2 $3 etc.
> 
> 
> This is quite unique. I don't believe I've ever seen someone try to
> write a command where each argument is a group of lines, and all of
> the groups of lines are supposed to be concatenated together to form
> one bigger group of lines.
> 
> For this goal, printf '%s\n' "$@" seems to be the correct choice.
> 
> The <<< "$@" construct is nonsensical. Whatever it does (which is
> pretty hard to predict, since it doesn't have a real definition), it
> will not serve your goal.
> 
> If you want to avoid a pipeline which would cause your processing loop
> to run in a subshell, then your syntax of choice would be:
> 
> while read ...
> do
> ...
> done < <(printf '%s\n' "$@")

I have found that nested loops are most clear Consequently, I have either this 
one

Code:

# Loop over arguments
for arg in "$@"; do
  # Loop over lines
  printf '%s\n' "$arg" |
    while IFS= read -r vl ; do
      ...
    done
done

or this

Code:

# Loop over arguments
for arg in "$@"; do
  # Loop over lines
  while IFS= read -r vl ; do
    ...
  done < <(printf '%s\n' "$arg")
done

Any preference and critique?  Or should I parse "$arg" in an array perhaps?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]