0

これが私のコンテキストです: profile という名前のプロファイルがあります

# file: profile

MY_PATH = "/home/deng/default"
MY_NAME = "deng" 

私のテストファイル:

#!/bin/sh
#file: test.sh
DJ_PATH="/deng/jian/doc"

OUTPUT_PATH="\"${DJ_PATH}/output\""
echo "OUTPUT_PATH = ${OUTPUT_PATH}"

DOC_KEY="MY_PATH"
DOC_VALUE=${OUTPUT_PATH}
echo "DOC_VALUE = ${DOC_VALUE}"

echo "sed 's:[ \t]*${DOC_KEY}[ \t]*=.*:${DOC_KEY} = ${DOC_VALUE}:' profile"
sed 's:[ \t]*${DOC_KEY}[ \t]*=.*:${DOC_KEY} = ${DOC_VALUE}:' profile

私が実行するターミナルで

$ ./test.sh 

そして出力は

1  OUTPUT_PATH = "/deng/jian/doc/output"
2  DOC_VALUE = "/deng/jian/doc/output"
3  sed 's:[ \t]*MY_PATH[ \t]*=.*:MY_PATH = "/deng/jian/doc/output":' profile
4   MY_PATH = "/home/deng/default"
5   MY_NAME = "deng"

プロファイルのテキストが、設定したい DOC_VALUE ("/deng/jian/doc/output") に置き換えられていないようです。しかし、出力行 3 でコマンドを実行しました。

sed 's:[ \t]*MY_PATH[ \t]*=.*:MY_PATH = "/deng/jian/doc/output":' profile

出力:

MY_PATH = "/deng/jian/doc/output"
MY_NAME = "deng"

どうしたの?test.shに書いたコマンドと何が違うの?

sed 's:[ \t]*${DOC_KEY}[ \t]*=.*:${DOC_KEY} = ${DOC_VALUE}:' profile

そして私が直接入れたコマンド?

sed 's:[ \t]*MY_PATH[ \t]*=.*:MY_PATH = "/deng/jian/doc/output":' profile
4

2 に答える 2

2

使用するファイル'では、bash に変数を解釈させません。

への変更"

sed "s:[ \t]*${DOC_KEY}[ \t]*=.*:${DOC_KEY} = ${DOC_VALUE}:" profile

または複数を使用してブレーク'

sed 's:[ \t]*'${DOC_KEY}'[ \t]*=.*:'${DOC_KEY}' = '${DOC_VALUE}':' profile
于 2012-12-21T07:52:23.413 に答える
0

この例を見てください:

#!/bin/sh

S=foo
D=bar

echo 'foo' | sed 's/${S}/${D}/g'       # echoes foo
echo 'foo' | sed 's/'${S}'/'${D}'/g'   # echoes bar
于 2012-12-21T07:53:16.160 に答える