は、私は、文字列シェルのリストをループする方法は?
string1
string2
string3
.
.
stringN
のリストを出力コマンドがあるとどのようにすることができますシェルで、リストのスルー出力Iループ?例えば
:
myVal=myCmd
for val in myVal
do
# do some stuff
end
(私は...プログラミングシェルに非常に新しいです)
は、私は、文字列シェルのリストをループする方法は?
string1
string2
string3
.
.
stringN
のリストを出力コマンドがあるとどのようにすることができますシェルで、リストのスルー出力Iループ?例えば
:
myVal=myCmd
for val in myVal
do
# do some stuff
end
(私は...プログラミングシェルに非常に新しいです)
はbash
while-loop
を使用して、ループがコマンドまたは入力ファイル上で行うことができます。例で
while IFS= read -r string
do
some_stuff to do
done < <(command_that_produces_string)
、Iは
$ cat file
My
name
is not
relevant
here
として内容のサンプル・ファイルを持っている私はそれがファイルを介して読み出すよう
$ cat script.sh
#!/bin/bash
while IFS= read -r string
do
echo "$string"
done < file
が生産ラインをエコーするスクリプトを変更しました実行時のo/p ./script.sh
My
name
is not
relevant
here
同じことをbash-commandで行うこともできます。ここではprocess-substitution (
<())
を採用して、サブシェルでコマンドを実行します。
#!/bin/bash
while IFS= read -r -d '' file; do
echo "$file"
done < <(find . -maxdepth 1 -mindepth 1 -name "*.txt" -type f -print0)
上記の単純なfind
リスト(スペース/特殊文字を使用したものを含む)、現在のディレクトリのすべてのファイル。ここで、find
コマンドの出力は、while-loop
によって解析されるstdin
に供給されます。
あなたは、非常に接近しているそれはちょうどカットし、問題の原因となっているペースト/タイプミスがされた場合に言うことができない - ライン1上の引用符とラインで$ 2
myVal=`echo "a b c"`
for val in $myVal
do
echo "$val"
done
これは 'abc'と' a'、 'b'と' c'の行を3つの異なる行で区別できません。 –
また '*'をカレントディレクトリのファイルのリストで置き換えます。 –
さらに、 '* $ 'が' $ myVal'で展開されている場合、*自体*がglobとして扱われる結果になる場合は、 'echo $ val'の中で*もう一度*起こりますそこ。 –
優れた答えを注意してください。私が不平を言うために見つけることができる唯一のことは、専門用語であるが実際にコードではないもののコードフォーマット(バッククォート)の使用です。 –
[このメタ・ディスカッション](http://meta.stackexchange.com/questions/135112/inline-code-spans-should-not-be-used-for-emphasis-right)、on-point re:を参照してくださいケースはコードスパンのフォーマットに適しており、適切ではありません。 –
@CharlesDuffy:本当にありがとう、私の答えを奨励!時間が経つにつれて回答のフォーマットを最適化する方法について専門家から学んできました。将来必ずそれらを修正します。 – Inian