タグ付けされた質問 「for」

forループに関する質問を示すタグ

6
findの出力をループするのはなぜ悪い習慣ですか?
この質問は、 シェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされるのですか? これらのコンストラクトが表示されます for file in `find . -type f -name ...`; do smth with ${file}; done そして for dir in $(find . -type d -name ...); do smth with ${dir}; done 一部の人々がこの種のものを避けるべき理由を説明するそれらの投稿にコメントするために時間を割いても、ほぼ毎日ここで使用されています... そのような投稿の数を見る(そしてそれらのコメントが時々無視されるという事実)私も質問をするかもしれないと思った: なぜループfindアウトの出力が悪い習慣であり、返される各ファイル名/パスに対して1つ以上のコマンドを実行する適切な方法は何findですか?
170 files  find  filenames  for 

1
Bash forループの「do」キーワードの目的は何ですか?
doBash forループ構文のキーワードの目的は何ですか?私には、それは冗長に感じます。 for i in `seq 1 2`; do echo "hi"; done なぜこのような構文ではないのですか? for i in `seq 1 2`; echo "hi"; done 私はそれが目的を満たしていると確信しています。学びたいだけです。
76 bash  shell  for 

4
bashでは、forループのループ制御で整数変数を使用できますか?
次のbashスクリプトがあります。 #!/bin/bash upperlim=10 for i in {0..10} do echo $i done for i in {0..$upperlim} do echo $i done 最初のfor(ループなしの可変upperlimループ制御中)は正常に動作するが、第二for(ループと可変upperlimループ制御では)ありません。2番目のforループを修正して動作させる方法はありますか?御時間ありがとうございます。
65 bash  shell  shell-script  for 


3
bashシェルスクリプトで、文字列値を反復処理するforループを記述する
bashでは、forループ制御変数iが指定された整数を反復するループを書くことができることを知っています。たとえば、1〜10の整数を出力するbashシェルスクリプトを作成できます。 #!/bin/bash for i in {1..10} do echo $i done 文字列のリストを提供する場合、文字列であるループ制御変数を代わりに反復することは可能ですか?たとえばfname、ファイル名を表す文字列があるとします。ファイル名ごとに一連のコマンドを呼び出します。たとえばfname、次のようなコマンドを使用した内容を印刷したい場合があります。 #!/bin/bash for fname in {"a.txt", "b.txt", "c.txt"} do echo $fname done 言い換えると、最初の反復でfnameは値fname="a.txt"を持ち、2番目の反復でfnameは値を持つ、というfname="b.txt"ようになります。残念ながら、上記の構文はまったく正しくないようです。出力を取得したい: a.txt b.txt c.txt しかし、上記のコードを試すと、次の出力が得られます。 {a.txt、 b.txt、 c.txt} 変数の値/内容を繰り返し変更できるように、正しい構文を決定するのを手伝ってもらえますfnameか?お時間をいただきありがとうございます。
24 bash  shell-script  for 

4
拡張されていないアスタリスクによるエラーの回避
bashでは、次のようなforループをよく使用します for file in *.type; do sommecommand "$file"; done; に一致するすべてのファイルに対して操作を実行します*.type。作業ディレクトリにこの末尾のファイルが見つからない場合、アスタリスクは展開されず、通常、コマンドがファイルを見つけられなかったというエラーメッセージが表示されます。このエラーを回避するいくつかの方法をすぐに考えられます。ただし、条件を追加してもそれほどエレガントではないようです。これを達成するための短くてきれいな方法はありますか?
16 bash  wildcards  for 

4
フォルダーをループしてファイルを一覧表示する
「sample」という名前のフォルダーがあり、その中に3つのファイルがあります。サンプルフォルダー内のこれらのファイルを読み取り、curlを使用してHTTPサイトに投稿するシェルスクリプトを書きたいのですが。 フォルダ内のファイルを一覧表示するために、次のように記述しました。 for dir in sample/*; do echo $dir; done しかし、それは私に次の出力を与えます: sample/log sample/clk sample/demo その中に親フォルダを付けています。次のように出力したい(親フォルダー名なし) log clk demo どうすればよいですか?

4
$ {!FOO}およびzsh
${!FOO}で二重置換を実行しますbash。つまり、FOOの(文字列)値を取得し、変数名として使用します。 zshこの機能をサポートしていません。 この作業をbashandで同じにする方法はありzshますか? バックグラウンド: 次のような環境変数のリストがあります PATH MAIL EDITOR そして、最初に変数名を出力し、その後それらの値を出力したい。 これは動作しますbashが、動作しませんzsh: for VAR in LIST do echo $VAR echo ${!VAR} done それは何とか「古い方法」で可能になるはずですがeval、私はそれを動作させることができません: for VAR in LIST do echo $VAR echo `eval \$$VAR` done 必要な${${VAR}}場合でも${${${VAR}}}必要な場合でも、単純に任意の深い置換を実行できない理由を理解することは決してないので、そのための説明もいいでしょう。

3
多変数forループ
forループ内に複数の変数(整数だけでなく)を指定する方法はありますbashか?作業する必要がある任意のテキストを含む2つのファイルがある場合があります。 機能的に必要なのは次のようなものです: for i in $(cat file1) and j in $(cat file2); do command $i $j; done 何か案は?

4
ディレクトリを除くファイルをループする
サブディレクトリを除く現在のディレクトリ内のすべてのファイルに対して何かを行うスクリプトが必要です。 たとえば、現在のパスには5つのファイルがありますが、そのうちの1つはフォルダ(サブディレクトリ)です。私のスクリプトは、スクリプトを実行するときに引数として指定されたコマンドをアクティブにする必要があります。つまり、「bash script wc -w」は、現在のディレクトリ内の各ファイルのワードカウントを提供する必要がありますが、どのフォルダも出力しないため、出力に「/ sub / dir:Is a directory」行は含まれません。 私の現在のスクリプト: #!/bin/bash dir=`pwd` for file in $dir/* do $* $file done ループのディレクトリを除外する必要があるだけですが、方法はわかりません。
11 bash  for 



2
配列のループで、配列に要素を追加します
bashのforループに問題があります。例:配列があり("etc" "bin" "var")ます。そして、私はこの配列について繰り返します。しかし、ループでは、配列に値を追加したいと思います。例えば array=("etc" "bin" "var") for i in "${array[@]}" do echo $i done これは表示されますetc bin var(もちろん、別々の行に表示されます)。そして、私doがそのように追加した場合: array=("etc" "bin" "var") for i in "${array[@]}" do array+=("sbin") echo $i done 私は欲しい:(etc bin var sbinもちろん別々の行に)。 これは機能していません。どうすればできますか?
9 bash  array  for 


1
forループがbashで機能しない
複数のファイルの一部のstrignを置き換える以下のコードがありますが、forループは最初のファイルをチェックしており、perlスクリプトを実行していません。以下は私のコードです if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ] then for file in $(./zebu.work.post_opt/ZEBU_CTO_FT_MOD*); do perl -i -p -e 's/input/inout/g' $file; perl -i -p -e 's/output/inout/g' $file; perl -i -p -e 's/wire.*\n/tran\(i0,\ o\);/g' $file; perl -i -p -e 's/assign.*\n//g' $file; done fi
7 bash  for 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.