How to use a variable to indicate a file descriptor in bash?

10,426

Solution 1

You have to use eval and put the entire expression in quotes.

eval "exec $id<>$file"

And do that every time you want to use $id.

Solution 2

The accepted answer is correct, but as of bash 4.1, you can use automatic file descriptor allocation, and in that case you don't need eval:

file=a
exec {id}<>"$file"

Then you can use it like this:

echo  test >&${id}

or:

fsck -v -f -C ${id} /dev/something
Share:
10,426
WH's HeV
Author by

WH's HeV

Updated on June 12, 2022

Comments

  • WH's HeV
    WH's HeV almost 2 years

    I want to use a bash variable to indicate a file descriptor, like this:

    id=6
    file=a
    exec $id<>$file
    

    But the usage is wrong:

    -bash: exec: 6: not found
    

    So, how to use a variable to indicate a file descriptor in exec command?