質問編集履歴

1 こーどみす

EzrealTrueshot

EzrealTrueshot score 388

2019/02/27 20:16  投稿

ssh先でbashの配列の変数展開は可能でしょうか?
# 環境
Linux (Ubuntu16.04) x 2台
# やりたいこと
見やすくするため改行して書いてますが、本来は1行コードで書いています。
```python
hairetu1 = ["apple", "banana", "grape"]
hairetu2 = ["りんご", "ばなな", "グレープ"]
subprocess.run('ssh 192.168.100.1 "declare -a array=({});
               j=0;
               for i in {};
               do
               echo \'   \'12345\'    \'\$i abcde \$array[\$j] >> /tmp/result;  
               j=\$((\$j + 1));
               echo \'   \'12345\'    \'\$i abcde \$array[\$j] >> /tmp/result;  
               done"'
               .format(' '.join(map(str, hairetu1)), ' '.join(map(str, hairetu2))), shell=True)
```
# 希望する結果
ssh 先のサーバーの **/tmp/result** ファイルに下記内容が記載されていること
```
   12345   apple abcde りんご
   12345   banana abcde ばなな
   12345   grape abcde グレープ
```
# 実際の結果
```
   12345   apple abcde りんご[0]
   12345   banana abcde りんご[1]
   12345   grape abcde りんご[2]
```
# 問題点
```
\$array[\$j]
```
ここがうまく変数展開されていないようです。
# 試したこと
```
\${array}[\$j]
\${array[\$j]}
色々な位置に {} や エスケープシーケンスを導入
```
# 教えてもらいたいこと
for文を使って、シェルの配列をうまく変数展開する方法についてご存知のかたいらっしゃいましたらご教示頂けませんでしょうか?
  • Python

    12341 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10312 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • シェル

    283 questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る