1

変数の連結がどのように機能するかをいくつか見てきましたが、期待どおりに機能しておらず、理由もわかりません...
txtファイルを配列に読み込んでいます。各行は、実行したいドメイン名ですファイル名 domain.zone simple right.... を持つファイルへのゾーン転送出力。

さて、ここに私が実際の発掘部分を取り出したスクリプトがあります

#!/bin/bash
filecontent=($(cat goodFvzones.txt))
for t in "${filecontent[@]}"
do
n=".zone"
x=$t$n
echo "$x"
#dig @dnsserver -t axfr $t > $x
done

動作しているドメイン名が domain.com の場合に上記のスクリプトを実行すると、出力として得られるものは次のとおりです: .zonen.com

予想される出力は domain.com.zone
です 変数 n (5 文字) の内容は、変数 t の最初の 5 文字を上書きしています 誰かが私が間違っていることを説明できますか?それを理解することができます。

4

2 に答える 2

8

短い文字列が長い文字列の先頭を「上書き」していることに気付いた場合、最初に考えるべきことはCR文字です (Windows および Mac の行末で使用されます)。コマンド置換は改行を削除しますが、Unixの改行 ( LF) を削除し、キャリッジ リターンには何もしません。

入力をフィルタリングしてtr -d '\r'キャリッジ リターンをdos2unix削除したり、ユーティリティを使用して壊れたファイルをその場で変換したりできます。

で出力を表示すると、less -Uこの種の問題をデバッグするのに役立ちます ( のless -Uように、キャリッジ リターン、タブ、およびバックスペースを制御文字として表示します^M ^I ^H)。

于 2013-01-31T21:38:32.853 に答える
0

キャリッジ リターン (\r) を IFS に追加して、引数を解析する目的で単なる空白文字にすることができます。

IFS=$(printf "$IFS\r")
filecontent=($(cat goodFvzones.txt))
for t in "${filecontent[@]}"
do
  n=".zone"
  x=$t$n
  echo "$x"
  #dig @dnsserver -t axfr $t > $x
done
于 2013-01-31T21:55:12.303 に答える