私は、find
を使ってフォルダを検索し、そのパスを保存するbashスクリプトの行を持っています。"find" bashで複数の空白を削除する
次のように行は次のとおりです。
findfolder=$(eval echo $(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1"))
をし、それがどのような場合でもほとんどで動作しますが、私はそれに2つのスペースを持っているフォルダを検索する場合、何らかの理由で、それはどこのパスを返します。すべての二重スペースが単一スペース用に切り替えられました。
だから、私は、フォルダを探していた場合は、「マイ」と「音楽」の間に2つのスペースで「マイミュージック」と呼ばれ、それが1つのスペースを入れてを「マイミュージック」を返します。
ターミナルでまったく同じコマンドを直接実行すると、正しいフォルダが取得されます。
どうしてですか? (より多くのコードが必要な場合は教えてください。私はターミナルから全く同じコマンドを実行して以来、関連性がないように見えます。
編集:それは今働いている
。最初の評価またはエコー(確信はないが、私のテストではそれがevalだったと示唆されていた)は、出力が崩壊して「不要な」間隔を取り除いていた。作業コードは
findfolder="$(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1")"
興味深い。しかし、二重$($)と証拠が必要ですか? –
@PéterVargaまあ、私はevalを使う前に動作させていませんでした。彼らはエコーを使って結果に変数を割り当てる問題を解決しました。 – keyser
@PéterVarga今私はそれを解決しました。最初の評価とエコーは不要で、崩壊の原因となっていました。奇妙なことに、ある時点で彼らは必要であることが分かりました – keyser