Sponsored Content
Full Discussion: Array with String Elements
Top Forums Shell Programming and Scripting Array with String Elements Post 302384319 by alister on Monday 4th of January 2010 09:48:38 PM
Old 01-04-2010
If I understood your situation correctly, I believe the solution is to use eval to pass the result of the command substitution though the shell's parser.

I'm using an old version of bash which does not support "set -A", so I'm using positional parameters instead of an array variable to try and explain myself. The principles involved are identical. Hopefully, I am able to get my point across Smilie

Code:
$cat eval.sh
# The goal is to assign the value of $first to $1
# and the value of $second to $2.

first='$second'  second='boo far'

# 1)
# This first example exhibits the problem you are
# experiencing.  The quotes intended to delimit the
# string are taken as part of the string itself,
# since command substitution occurs after the parsing
# step which cares about quoting.

set -- `echo \"$first\" \"$second\"`
echo "First positional parameter: $1"
echo "Second positional parameter: $2"

# Outputs:
# First positional parameter: "$second"
# Second positional parameter: "boo

# -----------------------------------------

# 2)
# Adding eval passes the result from command substitution
# through the parser, and the quotes are indeed interpreted
# as you'd like.  However, with weak double quotes, if
# there is anything in the substituted text that would
# cause the shell to attempt parameter/command substitution,
# the output will be undesirably affected. In this case, the
# value of $first, the string "$second", is taken as a parameter
# which is then substituted, resulting in the value of $1 
# being identical to that of $2.

eval set -- `echo \"$first\" \"$second\"`
echo "First positional parameter: $1"
echo "Second positional parameter: $2"

# Outputs:
# First positional parameter: boo far
# Second positional parameter: boo far

# -----------------------------------------

# 3)
# The correct solution is wrap the command substituted values
# in strong quotes, to ensure that they are taken literally and
# not word split when passed through the parser a second time.

eval set -- `echo \'$first\' \'$second\'`
echo "First positional parameter: $1"
echo "Second positional parameter: $2"

# Finally, the correct output:
# First positional parameter: $second
# Second positional parameter: boo far

Hope this helped,
alister

Last edited by alister; 01-04-2010 at 10:52 PM.. Reason: typos
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

To return the elements of array

Hi, Please can someone help to return the array elements from a function. Currently the problem I face is that tempValue stores the value in myValue as a string while I need an array of values to be returned instead of string. Many Thanks, Sudhakar the function called is: ... (5 Replies)
Discussion started by: Sudhakar333
5 Replies

2. Shell Programming and Scripting

Search array elements as file for a matching string

I would like to find a list of files in a directory less than 2 days old and put them into an array variable. And then search for each file in the array for a matching string say "Return-code= 0". If it matches, then display the array element with a message as "OK". Your help will be greatly... (1 Reply)
Discussion started by: mkbaral
1 Replies

3. Shell Programming and Scripting

Accessing array elements

Hi, My doubt is how to access array elements.. Situation is as below: #!/bin/ksh set -x typeset -i x=0 typeset -i y=0 typeset -i BID=0 typeset -i count=0 while ] ; do x=`expr $x + 1`; hwmgr show scsi > scsi.tmp while read line; do set... (1 Reply)
Discussion started by: mansa
1 Replies

4. UNIX for Dummies Questions & Answers

printing array elements

Is there a way to print multiple array elements without iterating through the array using bash? Can you do something like... echo ${array}and get all those separate elements from the array? (2 Replies)
Discussion started by: jrymer
2 Replies

5. Shell Programming and Scripting

Removing elements from an array

Hi I have two arrays : @arcb= (450,625,720,645); @arca=(625,645); I need to remove the elements of @arca from elements of @arcb so that the content of @arcb will be (450,720). Can anyone sugget me how to perform this operation? The code I have used is this : my @arcb=... (3 Replies)
Discussion started by: rkrish
3 Replies

6. Shell Programming and Scripting

Grouping array elements - possible?

I have a script which takes backup of some configuration files on my server. It does that by using an array which contains the complete path to the files to backup. It copys the files to a pre defined dir. Each "program" has it's own folder, ex. apache.conf is being copied to /predefined... (7 Replies)
Discussion started by: dnn
7 Replies

7. Shell Programming and Scripting

Multiplication of array elements

Hi, I can't find out how to create correct code to get multiplication of each elements of array. Let's say I enter array into command line (2 3 4 5 6 8) and i need output 2*3*4*5*6*8=5760. I tried this one, but answer is 0. for i in $@; do mult=$((mult*i))done echo "mult: " $mult ... (4 Replies)
Discussion started by: rimasbimas
4 Replies

8. Shell Programming and Scripting

Random elements from array

Hi I wanted to print random elements from an array at bash shell I use the following code, but I always see first element getting printed #!/bin/bash c=1 expressions=(pink red white yellow purple) while ]; do echo "The value of RANDOM is $RANDOM" selectedexpression=${expressions}]};... (5 Replies)
Discussion started by: Priya Amaresh
5 Replies

9. Shell Programming and Scripting

Help reading the array and sum of the array elements

Hi All, need help with reading the array and sum of the array elements. given an array of integers of size N . You need to print the sum of the elements in the array, keeping in mind that some of those integers may be quite large. Input Format The first line of the input consists of an... (1 Reply)
Discussion started by: nishantrefound
1 Replies

10. Shell Programming and Scripting

Get unique elements from Array

I have an array code and output is below: echo $1 while read -r fline; do echo "%%%%%%$fline%%%%%" fmy_array+=("$fline") done <<< "$1" Output: CR30903 YU0007 SRIL CR30903 Yogesh SRIL %%%%%%CR30903 YU0007 SRIL%%%%% %%%%%%CR30903 Yogesh SRIL%%%%% ... (8 Replies)
Discussion started by: mohtashims
8 Replies
JE::Object::Array(3pm)					User Contributed Perl Documentation				    JE::Object::Array(3pm)

NAME
JE::Object - JavaScript Array object class SYNOPSIS
use JE; use JE::Object::Array; $j = new JE; $js_array = new JE::Object::Array $j, 1, 2, 3; $perl_arrayref = $js_array->value; # returns [1, 2, 3] $js_array->[1]; # same as $js_array->value->[1] "$js_array"; # returns "1,2,3" DESCRIPTION
This module implements JavaScript Array objects. The "@{}" (array ref) operator is overloaded and returns a tied array that you can use to modify the array object itself. The limitations and caveats mentioned in "JE::Object/"USING AN OBJECT AS A HASH"" apply here, too. METHODS
See JE::Types for descriptions of most of the methods. Only what is specific to JE::Object::Array is explained here. $a = JE::Object::Array->new($global_obj, @elements) $a = JE::Object::Array->new($global_obj, $length) $a = JE::Object::Array->new($global_obj, @elements) This creates a new Array object. If the second argument is an unblessed array ref, the elements of that array become the elements of the new array object. If there are two arguments and the second is a JE::Number, a new array is created with that number as the length. Otherwise, all arguments starting from the second one become elements of the new array object. $a->value This returns a reference to an array. This is a copy of the Array object's internal array. If you want an array through which you can modify the object, use @$a. SEE ALSO
JE JE::Types JE::Object perl v5.14.2 2012-03-18 JE::Object::Array(3pm)
All times are GMT -4. The time now is 09:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy