3

I am doing some shell scripting.

I use this construction for creating new variables:

eval ${ARG}_ext=fastq

which works pretty nice because then I can use those newly created variable directly like this:

$file_ext

Now I want to assign value to the variable called extension:

extension=

The assigned value should be one found in variable ${ARG}_ext. Please, how can i do that?

I have tried

extension=eval ${ARG}_ext;

but this gives me name of the variable and I want its value. Thanks.

Leandro Papasidero
  • 3,728
  • 1
  • 18
  • 33
Perlnika
  • 4,796
  • 8
  • 36
  • 47

2 Answers2

5

Try:

$ extension=$(eval "echo \$${ARG}_ext")
Fredrik Pihl
  • 44,604
  • 7
  • 83
  • 130
1

Not a direct answer, but have you considered using associative arrays instead:

declare -A myhash
ARG=file
myhash[${ARG}_ext]='fastq'
extension="${myhash[${ARG}_ext]}"
echo "$extension"

Note that declare creates a local variable if used inside a function, so declare the associated array in global scope if you need it globally. (The newest versions of bash add a -g (global) option to declare that solves this issue.)

William
  • 4,787
  • 2
  • 15
  • 14