3

なぜこれが機能しないのか誰か教えてもらえますか?

Temp=$(sed -n '/"${Arr[$index]}"/,/"${Arr[$((index+1))]}"/p' $Text);

それでも動作しません。私はこれをやろうとしました:

index=0
while [ "$index" -lt "$((Arr_LEN-1))" ]; do
    Temp=$(sed -n "/${Arr[$index]}/,/${Arr[$((index+1))]}/p" $Text);       
    let "index++"
done
4

2 に答える 2

6

sedスクリプトは一重引用符で囲まれているため、すべての展開が妨げられます。

文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持されます。

ただし、一重引用符を二重引用符に変更すると、次のようになります。

文字を二重引用符で囲むと、$、 `、\、および履歴拡張が有効になっている場合は!を除いて、引用符内のすべての文字のリテラル値が保持されます。文字$と`は、二重引用符で囲まれた特別な意味を保持します。

于 2013-02-24T13:47:44.737 に答える
4

一重引用符を使用しているためです。試す:

Temp=$(sed -n "/${Arr[$index]}/,/${Arr[$((index+1))]}/p" $Text);
于 2013-02-24T13:47:52.753 に答える