2011-12-08 148 views
8

我有變量名如下:使用字符串作爲bash腳本

#!/bin/sh 

n=('fred' 'bob') 

f='n' 
echo ${${f}[@]} 

,我需要的是換人後底線執行

echo ${n[@]} 

沒有辦法做到這一點?我剛剛得到

test.sh: line 8: ${${f}}: bad substitution 

在我的末端。

回答

16

你可以做可變間接與這樣的陣列:

subst="$f[@]" 
echo "${!subst}" 

作爲靈魂樂注意到,你不應該使用#!/bin/sh這個。我使用#!/usr/bin/env bash作爲我的shebang,無論Bash在你的路上在哪裏,它都應該工作。

+0

這工作很好!謝謝! – Andy

+4

+1間接擴展比'eval'少得多。 –

5

你可以eval所需行:

eval "echo \${${f}[@]}" 

BTW:你的第一行應該是#!/bin/bash,你使用Bash特殊的東西像陣列

+0

+1如果我今天還有剩餘選票。你能解釋一下eval的作用嗎? – jman

+0

eval只是將參數字符串評估爲命令。 – Andy

+1

我不明白爲什麼人們在沒有提供任何反饋的情況下保持downvoting? – soulmerge