2017-08-15 10 views
0

も参照してください。previous questionを参照してください。 だから... ...私は、スクリプトがあります。bash関数を呼び出すときに変数の展開が機能しない

function go_loop(){ 
for i in `grep -v ^# $1`; do 
     $2 
done 
} 

go_loop "/tmp/text.txt" "echo $i" 

私は結果を持っている必要があります。

9 
20 
21 
... 

しかし、どうやら私は唯一の空の結果を得ることを。 2番目の入力パラメータをループにどのように送ることができますか? 私はこれを行うにアドバイスしないでください。

for i in `grep -v ^# $1`; do 
     echo $i 
done 

私は最初、2つの入力パラメータを確認する必要があり - ファイルの名前を、二 - 実行コマンドの名前

+0

。 – yacc

答えて

0

ため セットリダイレクトシェルを置き換える:

eval $2 

とこのようにそれを渡す:あなたはそれをdownvotedされていないでしょう、あなたの問題は、より正確な言葉で表現していた場合

go_loop "/tmp/text.txt" 'echo $i' 
+0

良い。ありがとうございました。それは私のために働く – Piduna

+0

確かに、あなたは歓迎です – yacc

0

あなたがループ内でexecを使用してこれを行うことができます、bashのコマンドとして$2を実行する:

[[email protected] ~]# ./test.sh 1 ls 
test.sh tests_passed.txt 
[[email protected] ~]# cat test 
exec $2 

EXEC組み込みコマンドが

に使用されています10

(ない新しいプロセスとして、それを実行する)特定のプログラムを実行するプログラムのためか、あなたは、このような二番目のパラメータをevalに必要な現在のシェル

関連する問題