Re: bash - safely pass untrusted strings?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Tue, Feb 26, 2008 at 05:30:12PM -0500, Jacques B. wrote:

> If I understand you correctly, you are referring to the problem caused
> by spaces in filenames?  Steve mentioned the environment variable IFS
> ("individual field separator" if memory serves me correctly).  By
> default it's space, tab, or newline.  You can change that in your
> script to be newline only in order to process file names with spaces
> in it, and then change it back afterwards (so save the value of $IFS
> at the beginning of the script to something like Default_IFS and then
> just prior to exiting the script reassign that value back to IFS to
> return it to its original state).  If that's what you are looking at

You don't need to do any of that in a script, because scripts are run as
a sub-process and don't impact the current environment.  You only need to
save/restore IFS if you're doing this as part of a larger script (or as a
function called in the current shell).

However, spaces AREN'T an issue with proper quoting.

  $ touch "a file with spaces in"
  $ touch "another file"
  $ ls
  a file with spaces in  another file
  $ for a in *
  > do
  > echo "File: $a"
  > done
  File: a file with spaces in
  File: another file

Indeed, carriage returns aren't an issue either!

  $ a=$(echo "a\nb")
  $ touch "$a"
  $ touch c
  $ ls
  a?b  c
[ Note the ? in the ls output; that's "ls" saying there's a funny character! ]
  $ for a in *
  > do
  > echo "File: $a"
  > done
  File: a
  b
  File: c

All works nicely.

You only need to use find if you're doing things deep down in a directory
tree.

-- 

rgds
Stephen
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
http://lists.centos.org/mailman/listinfo/centos

[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]
  Powered by Linux