1

文字列を連結して、csh スクリプト file1.csh でコマンド文字列を作成したいと考えています。しかし、csh は commandString 変数のエラーを出し続けており、何が間違っていたのかよくわかりません。ここにコードの一部があります。

set var1 = "Hat"
set var2 = 100
set embeddedString = 's/'$var1' =.*$/'$var1' = '$var2'/g'
set commandString = "sed -i ' "$embeddedString" ' productPrice.txt"
echo $commandString

私の目標は、commandString 変数を次のように設定することです。

sed -i 's/Hat =.*$ /Hat = 100/g' productPrice.txt 

次に、この commandString が別のスクリプト ファイル file2.csh に挿入されます。file2.csh は、ハットの価格の置換コマンドを実行する実際のスクリプト ファイルです。また、var1 と var2 の値は priceUpdateList.txt ファイルから読み取られるため、固定値ではありません。つまり、commandString 変数に単純に Hat と 100 を入力することはできません。csh でコマンド文字列を生成するために引用符を正しく使用する方法を知っている人はいますか?

どうもありがとうございました。

4

4 に答える 4

1

埋め込まれた一重引用符を (少なくとも 1 回) 引用する必要があります (つまりcmdStr = "sed -i \' ....、実際に $cmdStr を実行するには、必要になりますよねeval?

csh でシェル デバッグを使用するには (何が起こっているかを確認するためにお勧めします)、スクリプトの最初の行を次のように変更します。

#!/bin/csh -vx

これにより、実行されるコードの各行またはブロックが表示され、次に環境変数が展開された同じコード ブロックが表示されます。

于 2011-11-10T19:36:44.957 に答える
0

方法: set embeddedString="s,$var1 =.*,$var1 = $var2,g" set commandString="sed -i '$embeddedString' productPrice.txt"

必要に応じて、embeddedString で , の代わりに / を使用できます :-)

于 2011-11-09T20:55:51.040 に答える
0

非常に単純です:
あなたの目標は、commandString変数を次のように設定することです

sed -i 's/Hat =.*$ /Hat = 100/g' productPrice.txt 

commandString以下はそれを行い、目標と比較するために印刷します...

さらに、「最終」文字列を区切るものを除いて、すべての引用符は役に立ちません。
ただし、ほとんどの場合、 の間にスペースがないことに注意してください.*$ and /$var1。文字列名は文字で始まるべきなのに$/という名前の文字列を見たインタプリタを欺くには十分です。

set var1 = "Hat"
set var2 = 100
set embeddedString = "s/$var1 =.*$ /$var1 = $var2/g"
set commandString  = "sed -i $embeddedString  productPrice.txt"
echo  "$commandString"
于 2012-11-12T18:34:21.190 に答える
0

申し訳ありませんが、Cassie が引用した No Match について説明するのを忘れていました。

 echo $commandString

そしてenter code hereエコー "$commandString"

最初のものは正しく構築されたコマンドの結果をエコーすることです(もちろん、「productPrice.txt」という名前の存在しないファイルを読み取る必要があるため一致しませんが、2番目のものはコマンドを二重引用符で囲み、コマンド自体を表示します。求められたこと。

于 2012-11-12T18:44:09.910 に答える