LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   bash script with spaces (https://www.linuxquestions.org/questions/programming-9/bash-script-with-spaces-383086/)

Quantum0726 11-14-2005 01:01 PM

bash script with spaces
 
I am running into one problem with a bash script when the files it's analyzing contain spaces in the name. After some debugging I've narrowed it down to the following. I have a variable that's formed by grep'ing multiple lines out of a file. The contents of the variable are the filenames separated by \n characters (at least that's what it looks like when piping grep into a file. For example:

file name 1.txt
program name 1.sh

Now I need to perform several operations on each file individually. If I use a for loop this should work nicely.

for F in $FILENAMES
...
...
done

This code breaks the files up by spaces and \n characters, so in this case I get 6 iterations. If I enclose the $FILENAMES variable in "s, then I get only one string to work with, the entire contents of $FILENAMES in one iteration. What I need to have is $F be 'file name 1.txt' in the first iteration and 'program name 1.sh' in the second iteration (without the 's of course). What's a good way for me to do this?

Thanks much!

Dark_Helmet 11-14-2005 01:10 PM

This is a very common problem.

Here's a link to a reponse I made: http://www.linuxquestions.org/questi...81#post1864781

Doing a search in the forums for similar words or phrases ought to give you a ton of other ways.

Quantum0726 11-14-2005 09:26 PM

Thanks, I've been looking for something like this for quite some time but always managed to just find a more convoluted way around in the past. Your hint works great. Only thing I did different is kept the same 'for' loop code (without the quotes) as I need the variable later on and no need to grep the file twice. After using the IFS trick it seems that quoting isn't nearly as touchy in for loops.


All times are GMT -5. The time now is 12:04 PM.