4 ms·
The for loop works fine. Performing word splitting/wildcard expansion/etc on a variable will, well, split it into words/expand wildcards/etc, whether it was int
by decklin 14y ago
The for loop works fine. Performing word splitting/wildcard expansion/etc on a variable will, well, split it into words/expand wildcards/etc, whether it was introduced by a for loop or not.
- stiff 14y agoI am not sure I understand what you mean. Word-splitting is performed by the "for x in y" construct, using the IFS variable, so by default if you have a file called "foo bar.mp4" the command line from the article: for i in *.mp4; do ffmpeg -i "$i" "${i%.mp4}.mp3"; done will result in executing: ffmpeg -i foo foo.mp3 ffmpeg -i bar.mp4 bar.mp3 Which is obviously not what was meant. So it's a good habit to learn to loop over files in a directory in a different way.
- kps 14y agoPerhaps you have a very broken shell. $ function echon { echo $# $*; } $ >'foo bar.mp4' $ for i in *.mp4; do echon "$i" "${i%mp4}mp3"; done 2 foo bar.mp4 foo bar.mp3
- decklin 14y agoMaybe you are confusing this with what happens when you do for i in `find -name '*.mp4'`; do # ... or similar. In that case, the output of `find` is indeed split first, and `for` sees "foo", "bar.mp4", and so on.
- stiff 14y agoAh yes, you are right, thanks!