I’m a complete noob when it comes to bash, I extracted some timestamps from an xml file using xmlstarlet however its formatted as a space separated string rather than an array. I need them as an array so that I can use them in a for loop. As far as I can tell you can’t do that with xmlstarlet so I need to just convert the string.

I found this thread which says I can use IFS=’ ’ read -a arr <<< “$line” which works for a basic string but not the one I’m trying to use it with:

2023-06-19T00:00:00+01:00 2023-06-18T00:00:00+01:00 2023-06-17T00:00:00+01:00 2023-06-16T00:00:00+01:00 2023-06-15T00:00:00+01:00 2023-06-14T00:00:00+01:00 2023-06-13T00:00:00+01:00 2023-06-10T00:00:00+01:00 2023-06-03T00:00:00+01:00 2023-05-31T00:00:00+01:00 2023-05-27T00:00:00+01:00

If I use the command on this string it only puts the first part in the array so I get 2023-06-19T00:00:00+01:00

I also tried arr=( $line ) which is also suggested in the thread but that does the same thing. Is there another way I can try to convert this, or a way to export from xmlstarlet straight to an array?

  • sin_free_for_00_days@lemmy.one
    link
    fedilink
    English
    arrow-up
    1
    ·
    2 年前

    What exactly is your end goal? There might be other utilities that can get you to your wanted solution easier. I, the same as learnbyexample, did not have the problem.

    [\ #27]  line="2023-06-19T00:00:00+01:00 2023-06-18T00:00:00+01:00 2023-06-17T00:00:00+01:  00 2023-06-16T00:00:00+01:00 2023-06-15T00:00:00+01:00 2023-06-14T00:00:00+01:00 2023-06-   13T00:00:00+01:00 2023-06-10T00:00:00+01:00 2023-06-03T00:00:00+01:00 2023-05-31T00:00:00+  01:00 2023-05-27T00:00:00+01:00"
    [\ #28]  IFS=' ' read -r -a array <<< "$line"
    [\ #29]  for dt in "${array[@]}"; do echo "$dt"; done
    2023-06-19T00:00:00+01:00
    2023-06-18T00:00:00+01:00
    2023-06-17T00:00:00+01:00
    2023-06-16T00:00:00+01:00
    2023-06-15T00:00:00+01:00
    2023-06-14T00:00:00+01:00
    2023-06-13T00:00:00+01:00
    2023-06-10T00:00:00+01:00
    2023-06-03T00:00:00+01:00
    2023-05-31T00:00:00+01:00
    2023-05-27T00:00:00+01:00