私はbashシェルでPHP CLIを使用しています。詳細はManipulating an array (printed by php-cli) in shell scriptをご確認ください。bashシェルスクリプトでの動的変数(変数変数)の開始
次のシェルコードでは、PHPスクリプトから取得したkey
- value
個のペアをエコーすることができます。 'localhost'
'/path/to/project/root'
を持つ
$BASE_PATH
のようにそれらを使用できるように、whileループ内の動的変数を開始したい
BASE_PATH:/path/to/project/root
db_host:localhost
db_name:database
db_user:root
db_pass:root
$db_host
-
IFS=":"
# parse php script output by read command
php $PWD'/test.php' | while read -r key val; do
echo $key":"$val
done
は、このために出力されます
私はPHPの背景から来ました。ちょうどあなたのループ内でそれを使用し、その後
key="BASE_PATH"
value="/path/to/project/root"
# Assign $value to variable named "BASE_PATH"
eval ${key}="${value}"
# Now you have the variable named BASE_PATH you want
# This will get you output "/path/to/project/root"
echo $BASE_PATH
:私はPHP
の$$key = $val
@Martinありがとう、これは動作しますが、whileループの外側には可変スコープの問題があります。ループ内のeval行の直後に変数をエコーすることができますが、whileループの 'done'キーワードの外側には表示されません –
あなたが正しいのは、読み込み構造体がサブシェルを作成するからです。その後、内部変数はループの外側には表示されません。私は別の解決策で答えを更新します... –
申し訳ありませんが、このように動作しません。 'while 'を' php'コマンドから分離した場合( 'php $ PWD'/test.php 'の代わりに' -r key val; do'を実行した場合のように)、whileループは一度だけ実行され、 $ key'と '$ val'は空です。 –