UnixのEvalコマンド

UnixのEvalコマンド

誰かがこのコードを変換できますか?私はこれをインターネットから得た。

最初は、コマンドのパラメータの1つがプラス記号(+)またはマイナス記号(-)です。しかし、今追加する必要があるので(これ以上パラメータにはない)、自動的に追加したいと思います。

-|+) eval '(('jd2=${jd1}${5}${6}'))'
jd2date $jd2

答え1

コードはこんな感じですか?

case "$5" in
    -|+) eval '(('jd2=${jd1}${5}${6}'))' jd2date $jd2 
esac

その場合は、次のようにコマンドを呼び出すことができます。

script arg1 arg2 arg3 arg4 + 6

または

script arg1 arg2 arg3 arg4 - 10

コードは次のように作成できます。

 eval '(('jd2=${jd1}+${5}'))' jd2date $jd2 

コマンドは次のように呼び出されます。

script arg1 arg2 arg3 arg4 10

${5}、、、${6}および${jd1}$jd2その変数の内容に置き換えられます。数値変数(たとえば、$5および$6)は次のとおりです。位置パラメータ

もはや変数に演算子を配置する必要はないので、 eval呼び出す必要はありません。コードは次のとおりです。

 (( jd2=${jd1}+${5} ))
 jd2date $jd2

または少し簡潔な構文を使用してください。

 (( jd2 = jd1 + $5 ))
 jd2date $jd2

答え2

コードスニペットで何を達成したいのかわかりませんが、以下はevalを使用した例と同様のコマンド置換演算子との比較です。

$ echo `echo 2 + 2 | bc`
4
$ echo $(echo 2 + 2 | bc)
4
$ eval "echo 2 + 2 | bc"
4
$ echo "date"
date
$ eval "date"
Thu Oct 10 21:20:01 EDT 2013

したがって、eval はコマンドまたは一連のコマンドを「評価」し、対応するコマンド実行結果を返します。私は生涯にわたってコマンドを直接実行するだけでなく、evalバ​​ックティックや構文を使用して何ができるのかわかりません。$(...)

関連情報