I want to write out a bash array variable to a file, with each element on a new line. I could do this with a for loop, but is there another (cleaner) way to join the elements with \n?
Answer
Here's a way that utilizes bash parameter expansion and its IFS special variable.
$ System=('s1' 's2' 's3' 's4 4 4')
$ ( IFS=$'\n'; echo "${System[*]}" )
We use a subshell to avoid overwriting the value of IFS in the current environment. In that subshell, we then modify the value of IFS so that the first character is a newline (using $'...' quoting). Finally, we use parameter expansion to print the contents of the array as a single word; each element is separated by the first charater of IFS.
To capture to a variable:
$ var=$( IFS=$'\n'; echo "${System[*]}" )
If your bash is new enough (4.2 or later), you can (and should) still use printf with the -v option:
$ printf -v var "%s\n" "${System[@]}"
In either case, you may not want the final newline in var. To remove it:
$ var=${var%?} # Remove the final character of var
No comments:
Post a Comment