1

このスクリプトを実行しました

#!/bin/bash

liste=`ls -l`
for i in $liste
do
    echo $i
done

問題は、スクリプトに各結果を行ごとに表示させたいのですが、単語ごとに表示することです。

私は持っている :

my_name
etud 
4096
Oct
8
10:13

そして私がしたい:

my_name etud 4096 Oct 8 10:13

スクリプトの最終的な目的は、各行を分析することです。それが、ライン全体を回復できるようにしたい理由です。リストは最善の解決策ではないかもしれませんが、行を回復する方法がわかりません。

4

5 に答える 5

1

まず、ファイル名に改行が含まれていないと仮定します。

ls -l | IFS= while read -r line; do
    echo "$line"
    # Do whatever else you want with $line
done

ファイル名に改行が含まれる可能性がある場合、事態は複雑になります。この場合、stat各ファイルから目的のメタデータを個別に取得するために使用する方が適切です (速度は遅くなりますが)。残念ながらあまり標準化されていないため、man statローカルのさまざまな機能の詳細については相談してください。stat

for f in *; do
    line=$(stat -c "%U %n %s %y" "$f")  # One possibility
    # Work with $line as if it came from ls -l
done
于 2013-10-10T17:30:45.863 に答える
0

交換できます

echo $i

echo -n "$i "

echo -n 改行なしでコンソールに出力します。

于 2013-10-10T16:37:06.677 に答える
0

lsまず、実際のコードで真に使用しているのではなく、例としてのみ使用していることを願っています。ファイルのリストが必要な場合lsは、間違ったツールです。詳細については、 http://mywiki.wooledge.org/ParsingLsを参照してください。

次に、最新バージョンの bash には というビルトインがありreadarrayます。

これを試して:

readarray -t my_array < <(ls -l)
for entry in "${my_array[@]}"; do
  read -a pieces <<<"$entry"
  printf '<%s> ' "${pieces[@]}"; echo
done

my_array最初に、実行中のコマンドからのすべての出力を含む配列 ( と呼ばれる) を作成します。

次に、その出力の各行に対して、 という配列を作成し、 pieces各部分を矢印ブラケットで囲んで出力します。

ファイル全体を一度に読み取るのではなく、一度に 1 行ずつ読み取りたい場合は、http://mywiki.wooledge.org/BashFAQ/001 ("How can I read a file (data stream, variable) line-行ごと (および/またはフィールドごと)?")

于 2013-10-10T17:02:40.900 に答える
0

ファイルのリストを変数に保存する必要がある前の回答に参加します。あなたはこれを行うことができます

echo -n "$list"|while read -r lin
行う
 エコー $lin
終わり
于 2013-10-10T20:16:51.730 に答える
0

while ループを使用し、パイプを使用しない別の方法:

#!/bin/bash

while read line
do
    echo "line: $line"
done < <(ls -l)
于 2013-10-10T16:55:46.813 に答える