シェルスクリプトで、ある変数を別の変数に置き換えようとしています。しかし、空の文字列として表示されます。以下はそのシーンです。
- 変数「abc」を含む文字列に「x」を代入します。
~$ x="new value is \${abc}"
~$ echo $x
new value is ${abc}
- 以下は、abc->値を定義するabc.shスクリプトの内容です。
#!/bin/bash
abc="something='123:234'"
xyz=$@
echo $xyz
- "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}
)に置き換えられます。その後、シェルは文を再評価し、正しい文字列を変数に割り当てます。