0
    rm -rf xyz.log
    echo "Enter n"
    read n
    x[0]=ABC
    x[1]=DEF
    x[2]=GHI
    y[0]=MNO
    y[1]=PQR
    y[2]=STQ
    z[0]=RTY
    z[1]=LKJ
    z[2]=LDF
    for (( i=0; i<n; ++i ))
    do
      echo "${x[i]} ---- ${y[i]} ---- ${z[i]}" >> xyz.log
    done
    o=`cat xyz.log`
    echo $o

上記のスクリプトを実行すると、すべての出力が 1 行に表示されますが、xyz.log では行ごとに出力されます。同じことをechoコマンドで出力したい。前もって感謝します。

$ ./val.sh

n を入力してください

3

ABC ---- MNO ---- RTY DEF ---- PQR ---- LKJ GHI ---- STQ ---- LDF

$ 猫 xyz.log

ABC ---- MNO ---- RTY

DEF ---- PQR ---- LKJ

GHI ---- STQ ---- LDF

4

3 に答える 3

3

You're missing quotes in the last line:

o=`cat xyz.log`
echo "$o"
# ---^--^

Adding quotes will allow the shell to use the contents of the variable exactly. Otherwise, you're asking the shell to perform wordsplitting, where any sequence of whitespace (including newlines) will be replaced by a single space (by default).

rule of thumb: Always quote "$variables" except when you specifically want to not quote them.

Also, this is wrong

`rm -rf xyz.log`

You're performing the deletion in a subshell, and then using the output as a command. In this case, there is no output, but you can see the effect like this

`echo hi there` # -- command not found 'hi'
于 2013-01-20T13:54:06.557 に答える
0

-eオプションは、echoによる改行文字の追加インスタンスの解釈、および\tで表される水平タブなどの他の特殊文字の解釈を有効にするために使用されます。したがって、たとえば、次のようにフォーマットされた出力が生成されます。

echo -e "\n Projects: \n\n\tplan \n\tcode \n\ttest\n"

したがって、次のようなエコーコマンドを使用します。

echo -e "${x[i]} ---- ${y[i]} ---- ${z[i]} \n" >> xyz.log

それはトリックを行い、あなたが探している答えをあなたに与えるでしょう。

于 2013-01-20T05:58:37.797 に答える
0

-nのオプションを使用しますecho-n「いつものように行末に改行を書かない」という意味です。これはbashマニュアルページに記載されています。

echo >> xyz.logまた、ファイルの最後に改行を入れるだけにすることもお勧めします。

OUTFILE="xyz.log"

`rm -rf "$OUTFILE"`
echo "Enter n"
read n
x[0]=ABC
x[1]=DEF
x[2]=GHI
y[0]=MNO
y[1]=PQR
y[2]=STQ
z[0]=RTY
z[1]=LKJ
z[2]=LDF
for (( i=0; i<n; ++i )) ; do
    echo -n "${x[i]} ---- ${y[i]} ---- ${z[i]}" >> "$OUTFILE"
done
o=`cat "$OUTFILE"`
echo $o
于 2013-01-20T06:22:30.093 に答える