再割り当てなしでシェルスクリプト内の変数を別の変数に置き換える

再割り当てなしでシェルスクリプト内の変数を別の変数に置き換える

シェルスクリプトで、ある変数を別の変数に置き換えようとしています。しかし、空の文字列として表示されます。以下はそのシーンです。

  1. 変数「abc」を含む文字列に「x」を代入します。
~$ x="new value is \${abc}"
~$ echo $x
new value is ${abc}
  1. 以下は、abc->値を定義するabc.shスクリプトの内容です。
#!/bin/bash
abc="something='123:234'"
xyz=$@
echo $xyz
  1. "sh abc.sh $x" コマンドを実行すると、値未満になります。

実際 - >新しい値は$ {abc}です。

予想 - >新しい値はsome = '123:234'です。

上記の問題を解決するのに役立ちます。

ありがとう

答え1

value を挿入すると、new value is ${abc}その${abc}部分は単なる文字列です。これにより、拡張に対して文字列が再評価されなくなりますxyz=$@

文字列を拡張するには、${abc}スクリプトで次の操作を行います。

abc="something='123:234'"

eval "xyz=\"$1\""

printf '%s\n' "$xyz"

evalシェルコードが必要です。与えられたコードはこれを行いますxyz="$1"が、$1コマンドライン引数(strings new value is ${abc})に置き換えられます。その後、シェルは文を再評価し、正しい文字列を変数に割り当てます。

関連情報