正しいソリューション

正しいソリューション

私は2つのパラメータを受け入れるスクリプトを書いています。

#! /bin/bash

eval  for i in {$1..$2}; do echo $i;  done

私は次のように実行します:

$ ./myscript 0002 0010
 syntax error near unexpected token `do'

このエラーはなぜ発生しますか?

ループをグループ化する必要があるからだと思います。ただし、eval for i in {$1..$2}; do echo $i; doneに置き換えると、eval { for i in {$1..$2}; do echo $i; done; }エラーはまだ存在します。

注:中かっこ拡張の前に使用したいと思いますeval。私の例では、希望の出力はです0002 0003 0004 0005 0006 0007 0008 0009 0010支柱を拡張する前にパラメータ拡張を実行しますか?)

ベストアンサー1

その理由は、シェルがそれを評価する;ためにevalこれを見ることができないからです。

評価を遅らせるには、シェル特殊文字をエスケープする必要があり、文字通り渡すと次のようになりますeval

eval for i in \{"$1".."$2"\}\; do echo \"\$i\"\;  done

おすすめ記事