2016-06-29 14 views
0

"$"を保存したまま120個のモデルリストを印刷したいと思います。

私のスクリプトは次のとおりです。それを実行した後

#!/bin/sh 
for i in {1..10};do 
declare model="$"model$i 
model_list=$(paste $model) 
done 
echo $model_list 

paste: $model1: No such file or directory 
paste: $model2: No such file or directory 
paste: $model3: No such file or directory 
paste: $model4: No such file or directory 
paste: $model5: No such file or directory 
paste: $model6: No such file or directory 
paste: $model7: No such file or directory 
paste: $model8: No such file or directory 
paste: $model9: No such file or directory 
paste: $model10: No such file or directory 

所望の出力:

$model1 $model2 $model3 $model4 $model5 $model6 $model7 $model8 $model9 $model10 
+0

あなたは 'paste'コマンドが何を知っていますか?あるいは、どのコマンド置換( '$(...)')ですか? './$ model1'ファイルには' $ model1'というテキストのみが含まれていますか?そうでなければ、あなたのスクリプトとコマンドの理解に誤りがあります。 –

答えて

1

ます。また、スクリプトを短くすることができ

#!/bin/sh 

for i in {1..10}; do 
    declare model="\$"model$i 

    model_list+=$(paste $model) 
done 
echo $model_list 

:例えば

あなたはコードの下で使用できる配列を作成します

for i in {1..10};do 
echo -n "\$model$i " 
done 
echo 

または

for i in {1..10};do 
echo -n '$model'$i' ' 
done 
echo 

または

for i in {1..10};do 
model_list=$model_list" \$model$i" 
done 
echo $model_list 
+0

実際には、model_listは別のコマンドで定義されています。だから私は私が尋ねたものとまったく同じものが必要です。それをお勧めしますか? – Kay

+0

3番目のオプションを試してください私は私の答えに追加しました。それが動作すれば教えてください –

1

あなたは\$(バックスラッシュドル記号)を介して$をエスケープする必要があります。

#!/bin/sh 

for i in {1..10}; do 
    model_list+=$(paste "\$model${i}") 
done 

echo $model_list 

題した5つのファイル$model1 - $model5でテスト:あなたが代わりの出力に関心がある場合

File Contents: 
$model1 - a b c d e f g 
$model2 - 1 2 3 4 5 6 7 8 9 10 
$model3 - I J K L M N O P 
$model4 - 11 12 13 14 15 16 17 18 19 20 
$model5 - q r s t u v w x y z 

Output: 
a b c d e f g1 2 3 4 5 6 7 8 9 10I J K L M N O P11 12 13 14 15 16 17 18 19 20q r s t u v w x y z 
+0

ありがとう、私はまだ同じエラーが発生しています。 – Kay

+0

@Kayanあなたは '='から '+ ='に変更する必要があります、私は私の答えを更新します。 –

関連する問題