Visit Our UNIX and Linux User Community


To quote or not


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers To quote or not
# 1  
Old 08-16-2013
To quote or not

My question is, "Do I not understand, or is my information out of date?"
I am trying to just be a student, rtfm'ing. I am working on my work systems. Is it simply that the book was printed in 2002 and a lot has changed since then, or did I miss something?

Working in Korn Shell.
I have been reading O'Reilly "Learning the Korn Shell." (Which deals with ksh93)
We have Version M-11/16/88f, not 93.

I was reading about quoting, and the book cited an example using the 'find' command. It states that I need to quote wildcards used in the find command. It also says I need to use "-print" to see the results.

I use the find command a lot. I have neither been quoting/escaping, nor using -print, but I get what I am looking for:
Code:
root@s0ms3rv3r:/ >find / -name *dsmerr*
/etc/dsmerror.log
/home/s0m3uz3r/.ssh/dsmerror.log
/home/s0m3uz3r/dsmerror.log
/home/s0m3uz3r/tsm/scripts/dsmerror.log
/sys/logs/tsm/dsmerror.log
/usr/local/adm/clscripts/dsmerror.log
/usr/local/adm/hacmp/bak/dsmerror.log
/usr/local/adm/hacmp/dsmerror.log
/usr/local/adm/scripts/archive/dsmerror.log
/usr/local/adm/scripts/dsmerror.log
/usr/tivoli/tsm/client/ba/bin/dsmerror.log
/usr/tivoli/tsm/server/bin/dsmerror.log
root@s0ms3rv3r:/ >set -o emacs
root@s0ms3rv3r:/ >Version M-11/16/88f
root@s0ms3rv3r:/ >find / -name '*dsmerr*'
/etc/dsmerror.log
/home/s0m3uz3r/.ssh/dsmerror.log
/home/s0m3uz3r/dsmerror.log
/home/s0m3uz3r/tsm/scripts/dsmerror.log
/sys/logs/tsm/dsmerror.log
/usr/local/adm/clscripts/dsmerror.log
/usr/local/adm/hacmp/bak/dsmerror.log
/usr/local/adm/hacmp/dsmerror.log
/usr/local/adm/scripts/archive/dsmerror.log
/usr/local/adm/scripts/dsmerror.log
/usr/tivoli/tsm/client/ba/bin/dsmerror.log
/usr/tivoli/tsm/server/bin/dsmerror.log
root@s0ms3rv3r:/ >
 
 
root@4nothrs3rv3r:/ >ls -ltr $(find / -name *dsmerr*)
-rwxrwx--- 1 root system 1450 Apr 28 2003 /usr/local/adm/clscripts/dsmerror.log
-rw-r----- 1 root system 1068 Jan 25 2007 /usr/local/adm/scripts/archive/dsmerror.log
-rw-r--r-- 1 root system 161 Apr 22 2010 /usr/lpp/tivoli.tsm.client.hsm.jfs2/dsmerror.log
-rw------- 1 root system 24112 Aug 14 13:17 /sys/logs/tsm/dsmerror.log
-rw-r--r-- 1 oracle dba 578 Aug 14 13:34 /sys/logs/tsm/orasched-dsmerr.log
root@4nothrs3rv3r:/ >ls -ltr $(find / -name '*dsmerr*')
-rwxrwx--- 1 root system 1450 Apr 28 2003 /usr/local/adm/clscripts/dsmerror.log
-rw-r----- 1 root system 1068 Jan 25 2007 /usr/local/adm/scripts/archive/dsmerror.log
-rw-r--r-- 1 root system 161 Apr 22 2010 /usr/lpp/tivoli.tsm.client.hsm.jfs2/dsmerror.log
-rw------- 1 root system 24112 Aug 14 13:17 /sys/logs/tsm/dsmerror.log
-rw-r--r-- 1 oracle dba 578 Aug 14 13:34 /sys/logs/tsm/orasched-dsmerr.log

I am not being deliberately thick. I am inclined to assume, "old book, old shell, it works how it works, move on..."
But, I have hamstrung myself in the past by carrying around half-misunderstood concepts. Quoting and regex are things that are fuzzy to me, and I want to get them straight.

Last edited by Scott; 08-16-2013 at 11:56 AM.. Reason: Please use code tags
# 2  
Old 08-16-2013
If you leave a pattern unquoted it will work too, unless there happens to be one or more files in the current directory that match that pattern (the shell will then expand the pattern first), which can lead to surprising results, so it is a good habit to quote those patterns..

Last edited by Scrutinizer; 08-16-2013 at 12:09 PM..
# 3  
Old 08-16-2013
Thanks!

...and sorry about not using the code tag in my post.

---------- Post updated at 11:18 AM ---------- Previous update was at 11:10 AM ----------

Quote:
Originally Posted by Scrutinizer
If you leave a pattern unquoted it will work too, unless there happens to be one or more files in the current directory that match that pattern (the shell will then expand the pattern first), which can lead to surprising results, so it is a good habit to quote those patterns..
My takeaway is to use quotes.
I can also see that I don't understand the difference between the shell expanding the wildcards and the command expanding the wildcards. I'll go back and read again. I'll try some test file names to see how things work.

(Now I see that there is a "Thanks" button.)
# 4  
Old 08-16-2013
It means that the shell will expand the pattern and pass the resulting file names as a parameter to find (so find will never "see" a pattern, just the expansion result), which will lead to a syntax error if the result is more than one file and and to the wrong result if it just one file:

A short illustration would be:
Code:
$ ls
$ mkdir dir1
$ touch fileA fileB dir1/fileC dir1/fileD
$ find . -name 'file*'              # the shell does not expand patterns within quotes, so the shell removes the quotes and file* gets passed to find
./dir1/fileC
./dir1/fileD
./fileA
./fileB
$ find . -name file*                # pattern get expanded to fileA fileB
find: fileB: unknown primary or operator
$ rm fileB
$ find . -name file*                # pattern get expanded to fileA
./fileA
$ rm fileA
$ find . -name file*                # pattern does not get expanded, since no files with that pattern are present in the current directory.
./dir1/fileC
./dir1/fileD


Last edited by Scrutinizer; 08-16-2013 at 12:45 PM..
# 5  
Old 08-16-2013
Thanks for the expanded explanation

I had tried something similar and got a syntax error (about a missing conjunction) as you said:
Code:
-rw-r--r--    1 root     system            0 Aug 16 11:20 test
-rw-r--r--    1 root     system            0 Aug 16 11:20 2test
-rw-r--r--    1 root     system            0 Aug 16 11:20 2test2
-rw-r--r--    1 root     system            0 Aug 16 11:20 22test
-rw-r--r--    1 root     system            0 Aug 16 11:20 22test22

Thanks for teaching a man to fish.
# 6  
Old 08-16-2013
Quote:
Originally Posted by g.j.huebschman
I can also see that I don't understand the difference between the shell expanding the wildcards and the command expanding the wildcards.
When in doubt, see what it does when you feed it into echo. If anything gets changed, it's the shell that's doing it, not echo, because echo is stupid and dumb and translates nothing.

Code:
$ touch abcdefg # Create empty file
$ echo a* # Shell turns a* into abcdefg BEFORE echo is run
abcdefg

$ echo "a*" # Quotes prevent the shell from changing it
a*

$ rm abcdefg # Remove file, so its no longer found
$ echo a* # Since there are no files beginning with a, the shell leaves it as a*
a*

$


Last edited by Corona688; 08-16-2013 at 05:42 PM..
This User Gave Thanks to Corona688 For This Post:
 

Previous Thread | Next Thread
Test Your Knowledge in Computers #34
Difficulty: Medium
When a computer is first powered on, the special type of absolute loader is known as the pre-boot loader.
True or False?

9 More Discussions You Might Find Interesting

1. What is on Your Mind?

A terrific quote:

Food for thought! """ Everybody in this country should learn to program a computer...because it teaches you how to think. """ Steve Jobs. So, SO, true! Merry XMAS all... (4 Replies)
Discussion started by: wisecracker
4 Replies

2. Shell Programming and Scripting

Replacing all but the first and last double quote in a line with a single quote with awk

From: 1,2,3,4,5,This is a test 6,7,8,9,0,"This, is a test" 1,9,2,8,3,"This is a ""test""" 4,7,3,1,8,"""" To: 1,2,3,4,5,This is a test 6,7,8,9,0,"This; is a test" 1,9,2,8,3,"This is a ''test''" 4,7,3,1,8,"''"Is there an easy syntax I'm overlooking? There will always be an odd number... (5 Replies)
Discussion started by: Michael Stora
5 Replies

3. Shell Programming and Scripting

Replacing Double Quote in Double Quote incsv file

Hi All , We have source data file as csv file and since data could contain commas ,each attribute is quoted into double quotes.However problem is that some of the attributa data also contain double quotes which is converted to double double quote while creating csv file XLs data : ... (2 Replies)
Discussion started by: Shalini Badal
2 Replies

4. Shell Programming and Scripting

getting value between double quote

Can somebody supply me with a simple way to get a value between two double quotes? Example: input = ADR base is "/u01/app/oracle" output = /u01/app/oracle Thanks to all who answer (4 Replies)
Discussion started by: BeefStu
4 Replies

5. Shell Programming and Scripting

replacing a quote in some lines with multiple quote fields

i want to replace mistaken quotes in line starting with tag 300 and relocate the quote in the correct position so the input is 223;25 224;20100428064823;1;0;0;0;0;0;0;0;8;1;3;9697;18744;;;;;;;;;;;; 300;X;Event:... (3 Replies)
Discussion started by: wradwan
3 Replies

6. Shell Programming and Scripting

Regex in grep to match all lines ending with a double quote (") OR a single quote (')

Hi, I've been trying to write a regex to use in egrep (in a shell script) that'll fetch the names of all the files that match a particular pattern. I expect to match the following line in a file: Name = "abc" The regex I'm using to match the same is: egrep -l '(^) *= *" ** *"$' /PATH_TO_SEARCH... (6 Replies)
Discussion started by: NanJ
6 Replies

7. Shell Programming and Scripting

Quote and variable

The command line bellow works fine by itself. /opt/csw/bin/rsync -azq --delete -e "ssh -i /.ssh/ss" /home/ me@myaccount.storage.com:/home/ Now I would like to introduce some variable into it and make a .sh file such as bellow and it does not work anymore. I guess the part -e "ssh -i /.ssh/ss" has... (4 Replies)
Discussion started by: ngungo
4 Replies

8. Shell Programming and Scripting

double-quote inside double-quote

hey all, i made a simple .sh like this: echo "<style media="screen" type="text/css">@import url("main.css");</style>" but the output is: <style media=screen type=text/css>@import url(main.css);</style> i want to keep double-quotes, can anyone help me? thanks (3 Replies)
Discussion started by: indraf
3 Replies

9. Shell Programming and Scripting

Capturing Data between first quote and next quote

I have input file like RDBMS FALIURE UTY8703 'USER_WORK.TEST' .HIghest return code '12' I want to parse data which comed between first quote till next quote USER_WORK.TEST can you please suggest how to do that (4 Replies)
Discussion started by: scorp_rahul23
4 Replies

Featured Tech Videos