[9fans] rc and spaces in file names
Hello, I usually edit file names with a 'for' statement, so i can replace spaces and other problematic characters without effort. But today I needed to change names keeping spaces and I found something weird. Let be two files: 'Plan 9' and 'Plan B'. In a korn or bourne shell I can do something like: $ for i in Plan*; do a=`echo $i | 9 sed s'/lan/LAN/g'`; cp $i $a; done without problems with spaces. In Plan9 I've tried term% ifs='\n' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}} cp: can't create PLAN 9 : bad character in file name: 'PLAN 9 ' cp: can't create PLAN B : bad character in file name: 'PLAN B ' ' So the last newline character is added to the file name... I tried typing a literal newline in the ifs variable and it works: term% ifs=' ' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}} term% ls P* 'PLAN 9' 'PLAN B' 'Plan 9' 'Plan B' With p9p is the same. I'll appreciate If anyone can tell me why. trebol.
Re: [9fans] rc and spaces in file names
term% ifs='\n' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}} cp: can't create PLAN 9 : bad character in file name: 'PLAN 9 ' cp: can't create PLAN B : bad character in file name: 'PLAN B ' ' So the last newline character is added to the file name... I tried typing a literal newline in the ifs variable and it works: term% ifs=' ' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}} term% ls P* 'PLAN 9' 'PLAN B' 'Plan 9' 'Plan B' With p9p is the same. I'll appreciate If anyone can tell me why. rc doesn't do backslash escapes. tristan -- All original matter is hereby placed immediately under the public domain.
Re: [9fans] rc and spaces in file names
I tried typing a literal newline in the ifs variable and it works: term% ifs=' ' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}} term% ls P* 'PLAN 9' 'PLAN B' 'Plan 9' 'Plan B' With p9p is the same. I'll appreciate If anyone can tell me why. i'm not sure which question you have. i'll try to answer the two i see. '\n' doesn't work because rc doesn't interpret \ except as the last character of a line. plan 9 ls helpfully quotes file names that might need quoting if fed to rc. ls -Q will get rid of the quotes. (see ls(1).) so the file names do not include the single quotes. if they did, you'd see '''Plan B'''. - erik
[9fans] rc and spaces in file names
Ok, thanks to both. I got confused with this part of rc(1): `{command} rc executes the command and reads its standard output, splitting it into a list of arguments, using characters in $ifs as separators. If $ifs is not otherwise set, its value is ' \t\n'.
Re: [9fans] rc and spaces in file names
On Fri Dec 20 09:48:29 EST 2013, trebol55...@aol.com wrote: Ok, thanks to both. I got confused with this part of rc(1): `{command} rc executes the command and reads its standard output, splitting it into a list of arguments, using characters in $ifs as separators. If $ifs is not otherwise set, its value is ' \t\n'. that's a good point. it looks like the wrong conventions were applied to that string. ironically, one would guess, this was to solve a readability problem. perhaps ... otherwise set, space, newline, tab will be used as separators would be more precice even if it doesn't read as well. - erik