問題タブ [ifs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1095 参照

bash - bashでスペースを含むファイルを適切に処理して印刷する方法

私は単純な再帰的な ls プログラムを bash で書いています (これはあまり経験がないので、遠慮なく残忍にしてください)。

このプログラムは、各ファイル (場合によってはディレクトリ) を別々の行に出力することになっています。新しいディレクトリが入力されるたびに、出力が 4 つのスペース分シフトされ、ツリーのような出力が得られます。

現在、スペースを含むファイルを正しく出力せず、ディレクトリの後にスラッシュを付けません。(詳細は以下をご覧ください。)

コード

出力

スクリプトは、 というフォルダに含まれていますbash-practice。するとrecls .、次の出力が得られます。

問題

ご覧のとおり、インデントは適切に機能していますが、2 つの問題があります。

1) スペースが含まれているため、ファイルsample document.txtが 2 行にまたがっています。

2)すべてのディレクトリの前にスラッシュが必要ですが、何らかの理由で最初のディレクトリでしか機能しません。

試みられた解決策

(1) を修正するために、内部ファイル区切り文字を保存して、次のように改行文字に置き換えてみました。

しかし、これはまったく機能しませんでした。最初のフォルダー以上は表示されませんでした。明らかに私の物事の理解は正しくありません。

(2) については、意図したとおりに動作しない理由がわかりません。

結論

bash は、他のほとんどのプログラミング言語 (シェル スクリプト言語) よりも珍しい構文を持っているように思われるため、私にとっては難しいので、私の過ちと解決策についての洞察をいただければ幸いです。

更新 #1

mklement0 が提案したサイトhttp://www.shellcheck.comに行きましたが、そのヒントは基本的にすべて二重引用符でした。を二重引用符で囲む"$@"と、プログラムはファイルを正しく出力しましたsample document.txtが、その直後に " binary operator expected" エラーが発生しました。以下は、現在の外観を印刷したものです。

ここに画像の説明を入力

更新 #2 [問題は解決しましたか?]

myls_internalOK、タイプミスがあったため、再帰時に呼び出された関数の以前のバージョンにデフォルト設定されていたことが判明しました。この以前のバージョンでは、ディレクトリをスラッシュでマークしていませんでした。「更新」セクションのエラー メッセージも修正されました。ラインを変えました

myls_internal "$file/*"

recls_internal $file/*

そして今、それは正しく動作しているようです。誰かが回答を書いている途中である場合でも、「$ @」を引用してスペースの問題を修正する方法の仕組みがよくわからないので、あなたの洞察に感謝します。

固定コード:

固定出力:

ここに画像の説明を入力

アップデート #3

この線

recls_internal $file/*

代わりに

recls_internal "$file"/*

スペースを含むディレクトリを正しく処理します。cs 350それ以外の場合は、含むHomework1.pdfなどのフォルダHomework2.pdfに展開されます

cs 350/Homework1.pdf 350/Homework2.pdf

いつあるべきか

cs 350/Homework1.pdf cs 350/Homework2.pdf

おもう?何が起こっているのかの詳細はわかりませんが、それで修正されたようです。

0 投票する
2 に答える
231 参照

shell - IFS=$'\n' は「n」を削除しました

「IFS=$'\n' に問題があります。

スクリプトを実行すると:

「ン」が削除されます。ファイルを1行ずつ表示したい

0 投票する
1 に答える
28 参照

file - ファイルへの出力の書き込みに関する問題

形式の小さなcsvファイルを読み込んでいますsize,name.1行に1セットです。私のテスト ファイルでは、csv ファイルに 2 行あります。

コードを使用する場合

name各行の値が端末に出力されます。

コードを使用する場合

次に、最後のものだけがファイルnameに出力されtemp2.txtます。

私は何を間違っていますか?!

0 投票する
3 に答える
1524 参照

arrays - \| を使用して bash スクリプトで配列を結合します。区切りとして

bash スクリプトに PID の配列があります。これらを \| で結合したい grep を使用して、配列内のいずれかの PID に一致するものを検索できるようにセパレーターとして。基本的に、以下に示すように IFS を変更しようとしていますが、発生する問題は、目的の出力ではなく、

私は得る

これは私が使用しているコードです

さまざまな方法で入力を変更しようとしましたが、何も機能しません。これに対するIFSのアプローチは不可能ですか?

0 投票する
2 に答える
307 参照

bash - IFS が新しい行で停止しないようにする

単一の delimiter を使用して配列に変換したい複数行の文字列があり|ます。ただし、設定IFS=|すると、新しい行が表示される直前に停止します。

残りの行が評価されない理由と、それを防ぐ方法、新しい行の存在に関係なくすべての変数を割り当てることができるのは不思議です。

0 投票する
2 に答える
875 参照

bash - read と IFS を使用した Bash while ループ

次の形式でファイルを解析する必要があります。

そして、現在の行からすべてのパラメーターを抽出して、行ごとに処理します。現在、私はそのような方法でそれを管理しています:

一時ファイルの作成を回避するにはどうすればよいですか?

残念ながら、これは正しく動作しません:

行全体がparam1に割り当てられているため。