2012-03-31 6 views
0

私は、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")" 
+1

興味深い。しかし、二重$($)と証拠が必要ですか? –

+0

@PéterVargaまあ、私はevalを使う前に動作させていませんでした。彼らはエコーを使って結果に変数を割り当てる問題を解決しました。 – keyser

+1

@PéterVarga今私はそれを解決しました。最初の評価とエコーは不要で、崩壊の原因となっていました。奇妙なことに、ある時点で彼らは必要であることが分かりました – keyser

答えて

3

私はあなたがevalステートメントで何をしようとしているのか分かりません。しかし、コマンド置換を引用して試してみることもできます。次の2つのコマンドラインの違いに注意してください:

# the two spaces between foo and bar are collapsed 
echo $(echo "foo bar") 

# the two spaces between foo bar bar are kept 
echo "$(echo "foo bar")"