Syntax error: word unexpected (expecting ")")


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
Old 03-05-2009
Syntax error: word unexpected (expecting ")")

I have a very simple script that reads in the contents of a file (_open.txt) into an array "lyrics":
Code:
#!/bin/sh

# read in the text
lyrics=( `cat _open.txt` | tr '\n' ' ')

exit 0

It gives the following error message:
./lyrics.sh: 1: Syntax error: word unexpected (expecting ")")

I have also tried
Code:
lyrics=($(cat _open.txt))

as well as with and without quotes (single and double) around the filename.
but it yields the same error message. The path /bin/sh is correct. What is the error message really saying?
# 2  
Old 03-05-2009
try this
Code:
#bash:
declare -a lyrics=$( <  _open.txt )
#ksh
set -A lyrics=$( <  _open.txt )

If you are using bash or ksh this will work. ksh limits the number of elements in an array to 1023. So _open.txt has to have less than 1024 "words" in it.
# 3  
Old 03-05-2009

What shell is in /bin/sh?

Most shells do not have arrays, so you may have to change the shebang to one that does, perhaps "#!/bin/bash".
# 4  
Old 03-05-2009
Thank you for your prompt response. What is the cause of the syntax error? By the way, the file contains a large word, ie a body of text without spaces, so is there a limit to what the array lyrics can hold in terms of maximum size of array element?
# 5  
Old 03-05-2009
For bash there is no defined limit.
Code:
a=$( < war_and_peace.txt)

You could put a whole book into a bash variable or an array. You are limited by virtual memory on your machine.

ksh also allows variable to be really large as well, but limits the number of elements in an array.
# 6  
Old 03-05-2009
Quote:
Originally Posted by jim mcnamara
try this
Code:
#bash:
declare -a lyrics=$( <  _open.txt )
#ksh
set -A lyrics=$( <  _open.txt )


Neither declaration is necessary. In either bash or ksh93, simply assigning it is enough:

Code:
lyrics=( $( tr '\n' ' ' <  _open.txt ) )

Note that you do not need tr; the shell will split the array on the characters in $IFS, which normally includes a space. So this is the same as the above:

Code:
lyrics=( $( <  _open.txt ) )

Quote:
If you are using bash or ksh this will work. ksh limits the number of elements in an array to 1023. So _open.txt has to have less than 1024 "words" in it.

Ksh88 was limited to 1023 elements, but I don't think it accepted that syntax for assigning a number of elements to an array.

Ksh used to be limited to 4096 elements in an array, but versions for the last few years have, like bash, been limited only by available memory.
# 7  
Old 03-05-2009
Chris -

With regard to arrays -

I disagree. Simply because you can NOT do something and have it work doesn't necessarily mean it is a great idea. There is a concept: self-documenting code.

Yes, syntactically, you are correct. In terms of good practice you are not. IMO.
You obviously do not buy this idea, so it's okay. Perderabo & I have gone around on this as well.

My point: In real world shops, especially now, people come & go & get outsourced.
Harder to read code is harder to maintain. Period. See 'Code Complete' by Steve McConnell 2nd Ed. Small changes to improve readability matter in the long run because 95% of the cost of software is in maintenance....

Unless this is a massive system operation running in an environment where you need to limit process resource usage as much as possible, code obfuscation in an attempt to gain performance is not de facto a good idea always. Not that this example makes much difference performance wise. Just coding for the 'next guy'.
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Unexpected "(" (expecting "}") ACorner Shell Programming and Scripting 12 02-15-2019 06:39 AM
Error: "Syntax error; unexpected end of file" Pradeep_Raj Shell Programming and Scripting 1 03-15-2018 05:49 AM
Keep getting error "-bash: ./.profile_z2: line 52: syntax error: unexpected end of file" getzeeshan BSD 3 06-09-2017 10:04 AM
"Unexpected EOF within #IF, #ifdef or #ifndef" error when rebuilding / relinking SCO OpenServer 5 dj_Italian SCO 7 01-17-2015 11:17 AM
HP-UX: Shell Script giving " 0^J30: Syntax error" vai_sh HP-UX 16 03-10-2014 05:28 AM
Error"syntax error at line 15: `end of file' unexpected" millan Shell Programming and Scripting 5 05-31-2013 04:14 AM
Help with FTP Script which is causing "syntax error: unexpected end of file" Error mahi_mayu069 Shell Programming and Scripting 1 04-25-2013 07:27 AM
Help with error "syntax error: unexpected end of file" mahi_mayu069 Shell Programming and Scripting 2 04-25-2013 07:03 AM
How to lclear "expr: syntax error" eventhough everything looks fine? lathanandhini Homework & Coursework Questions 6 03-18-2013 12:37 PM
Syntax error near unexpected token `"Hit <ENTER> to continue:"' lathigara Shell Programming and Scripting 7 07-31-2012 05:52 PM
Bash (Ubuntu server): Syntax error: "|" unexpected in While-loop primaxx Shell Programming and Scripting 3 09-19-2011 03:20 PM
ksh-script "arithmetic syntax error" comparing strings old_mike Shell Programming and Scripting 3 10-14-2009 10:40 AM
"syntax error near unexpected token `fi' " GIC1986 Solaris 4 09-19-2008 12:17 PM
awk Shell Script error : "Syntax Error : `Split' unexpected Herry UNIX for Dummies Questions & Answers 2 03-17-2008 11:16 AM
"syntax error at line 21 :'done' unexpected." error message" ibroxy Shell Programming and Scripting 3 08-08-2007 06:45 AM