Array declared in shell script works for AIX but fails in Linux


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Array declared in shell script works for AIX but fails in Linux
# 1  
Old 02-19-2020
Array declared in shell script works for AIX but fails in Linux

Array declared in shell script works for AiX 6.1 and above but fails in Linux CentOS 7.

I have the below code for Array in my shell script that runs fine on AiX systems.

Note: on AiX it uses ksh shell while on Linux it uses non ksh shell.

Code:
set -A filelist

However, i now wish to use the same shell script on both AiX and Linux.

On Redhat Linux CentOS 7 the above code fails as below:

Code:
-bash-4.2$ set -A filelist
-bash: set: -A: invalid option
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

I want the array declaration to work on both AiX and Linux systems.

How is it possible to achieve ?

Last edited by mohtashims; 02-19-2020 at 04:05 AM..
# 2  
Old 02-19-2020
Write one for AIX and one for linux...
I would not be surprised if that syntax were AIX specific, anyway AIX default shell is ksh and linux bash... either you set ksh on your linux or bash on AIX, by the way when will you migrate your AIX I doubt it beeing supported now...
typeset (or set on AIX) is used in ksh whereas declare is for bash so you have no other choice to write if you want a script to work on both or more plateforms customisation according to the OS that means using tests and executing the the required code accordingly
# 3  
Old 02-19-2020
I think you have ksh-88.
You can augment your script(s) with a wrapper function (located somewhere at the beginning):
Code:
set_A(){
typeset varname=$1
shift
if [ "$BASH" ]
then
  eval "$varname=( \"\$@\" )"
else
  eval "set -A $varname \"\$@\""
fi
}

Now you can replace each set -A by a set_A in your script.
A demo:
Code:
set_A filelist 1 2 3 4 "*"
filelist[3]="four"
printf "%s\n" "${filelist[@]}"

Output:
Code:
1
2
3
four
*

--- Post updated at 23:31 ---

BTW in Linux you can install a ksh as well. Best compatibility provides ksh-93. But you can also try mksh or pdksh.
This User Gave Thanks to MadeInGermany For This Post:
# 4  
Old 02-19-2020
As you have now valid solutions to your issue AND as we are not here to do the work for you its time to close this thread knowing that you are not following the new rules
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace string works on command-line but fails when run from shell script

I wish to replace "\\n" with a single white space. The below does the job on command-line: $ echo '/fin/app/scripts\\n/fin/app/01/sql' | sed -e 's#\\\\n# #g'; /fin/app/scripts /fin/app/01/sql However, when i have the same code to a shell script it is not able to get me the same output:... (8 Replies)
Discussion started by: mohtashims
8 Replies

2. Shell Programming and Scripting

Find command works on Linux but fails on Solaris.

Hi, I am looking for a generic find command that works on both Linux and Solaris. I have the below command that works fine on Linux but fails on solaris.find /web/config -type f '(' -name '*.txt' -or -name '*.xml' -name '*.pro' ')' Fails on SunOS mysolaris 5.10 Generic_150400-61 sun4v sparc... (1 Reply)
Discussion started by: mohtashims
1 Replies

3. UNIX for Beginners Questions & Answers

Linux shell | how to exit a script if any command fails.

Hi, i am new here let me say HI for all. now i have a question please: i am sending one command to my machine to create 3 names. if one of the names exists then the box return error message that already have the name but will continue to create the rests. How i can break the command and... (7 Replies)
Discussion started by: Amiri
7 Replies

4. Shell Programming and Scripting

sed works on Linux but fails on Solaris

Hi, On Linux i get the desired ouput: echo "<value>WEB_USER</value>" | sed 's/\(<value>\|<\/value>\)//g'Output: Executing the same command on Solaris: echo "<value>WEB_USER</value>" | sed 's/\(<value>\|<\/value>\)//g'Output: I need to get the desired output on Solaris i.e. WEB_USER and... (4 Replies)
Discussion started by: mohtashims
4 Replies

5. Shell Programming and Scripting

awk works on Linux but fails on Solaris

On linux i have the below command working fine. awk '/<app-deploy>/{A=1;++i} /<\/app-deploy>/{print >> "found"i".tmp";A=0} A{;print >> "found"i".tmp"}' deploy.xml But the same is failing on Solaris Output: awk: syntax error near line 1 awk: bailing out near line 1 uname -a SunOS mymac 5.10... (5 Replies)
Discussion started by: mohtashims
5 Replies

6. Shell Programming and Scripting

Grep works on Linux but fails on Solaris

Hi, On linux i have the below command working fine. grep -o '<name>.*</name>' deploy.tmp | sed 's/\(<name>\|<\/name>\)//g' deploy.tmp But the same is failing on Solaris uname -a SunOS mymac 5.10 Generic_150400-23 sun4v sparc sun4v Can you tell me how can i get it work on Solaris ?... (6 Replies)
Discussion started by: mohtashims
6 Replies

7. Shell Programming and Scripting

awk regex expression works in AIX but not in Linux

I have following expression: echo "Sun 12 Jul BST 2014\nSun 12 Jul 2014\nSun 12 Jul IS 2014" | awk '/(Sun)+( 12)+( Jul )+({3} )?(2014)/{print;}' I ran above code in AIX box and output is as follows Sun 12 Jul BST 2014 Sun 12 Jul 2014 I ran above code in Linux box and output is as... (8 Replies)
Discussion started by: kamlesh_pradhan
8 Replies

8. Shell Programming and Scripting

Assign user input to already declared array

What I am doing is creating a top menu, which a user will select a choice with a number entry. That number corresponds to a string in an array. I then want to assign that response to another array I've already declared. For example: #!/bin/bash colors=(red blue yellow) red=(cherry fire)... (2 Replies)
Discussion started by: Akilleez
2 Replies

9. Shell Programming and Scripting

Help wth Net::FTP in script sometimes fails but wsftp always works

Hi, I have a script that transfers files from a Solaris server to target unix servers. The script uses Net::FTP->put to write the files, which can be any number of files, not always the same. This script works flawlessly to many servers. For one particular instance of the script,... (3 Replies)
Discussion started by: csgonan
3 Replies

10. Shell Programming and Scripting

shell script: Bind variable not declared

Hi Friends, I am trying to run a sql query from shell script as below but I get "Bind variable "1" not declared" error. 1.sh shell script has following: sDb="abc/xyz@aaa" a="1.sql" sqlplus -s $sDb @$a $1 1.sql file has following: spool Result.tmp append select cust_name from orders... (1 Reply)
Discussion started by: ppat7046
1 Replies
Login or Register to Ask a Question