GNU/Linux >> Linux の 問題 >  >> Linux

Linux シェルでは、複数行の文字列の各行をどのように処理できますか?

文字列を関数に渡すだけです:

function my_function
{
    while test $# -gt 0
    do
        echo "do something with $1"
        shift
    done
}
my_string="cat
dog
bird"
my_function $my_string

あなたに与えます:

do something with cat
do something with dog
do something with bird

そして、他の空白が引数の区切り文字として使用されることに本当に関心がある場合は、最初に IFS を設定します :

IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string

取得する:

do something with cat and kittens
do something with dog
do something with bird

unset IFS を忘れないでください


これを使用します (ファイル file から各行を読み取るループです) )

cat file | while read -r a; do echo $a; done

どこで echo $a 現在の行で何をしたいかです。

更新:コメンテーターから (ありがとう!)

複数行のファイルはなく、複数行の変数がある場合は、

を使用します
echo "$variable" | while read -r a; do echo $a; done

UPDATE2:"read -r " バックスラッシュを無効にすることをお勧めします (\ ) 文字の解釈 (mtraceur のコメントを確認してください。ほとんどのシェルでサポートされています)。これは POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html で文書化されています

<ブロック引用>

デフォルトでは、-r オプションが指定されていない限り、<backslash> です。 エスケープ文字として機能します。 .. 次のオプションがサポートされています:-r - <backslash> を扱わない 任意の特別な方法で文字。それぞれが入力行の一部であると考えてください。


Linux
  1. シェルの$*の各要素に文字列を追加して追加しますか?

  2. Linuxでシェルを変更する方法

  3. Linux でコマンド ライン シェル関数を使用する方法

  1. Linux シェルで 16 進数を ASCII 文字に変換する方法は?

  2. Linux のシェル出力を HTML に変換するには?

  3. Linuxコマンドラインで複数のファイルの文字列を置き換える方法

  1. Bashシェルスクリプトで改行をエコーする方法

  2. ファイルの各行の先頭に文字列を追加するにはどうすればよいですか?

  3. Linux コマンドを使用してシェルのバージョンを確認するにはどうすればよいですか?