引用する

引用する

これを呼び出すスクリプトがあります

find "/mnt/Data/Shared/$1" -type d -exec bash -c 'fixperm "'${1}'" "fd" "$0"' {} \;

$ 1はディレクトリです。名前にスペースがない場合は機能しますが、スペースがある場合は失敗してエラーを返します。 「00_Office Test」でテスト

Test" "fd" "$0": -c: line 0: unexpected EOF while looking for matching `"'
Test" "fd" "$0": -c: line 1: syntax error: unexpected end of file

パスにスペースの前に\がないので、そうかもしれないと思いましたが、問題は解決されませんでした。私はここでマイナーなものを見逃していると確信しています。

ベストアンサー1

これは一重引用符の外に表示されるためです${1}。つまり、シェルが表示前に拡張され、トークン化されるという意味ですfind。 StackExchangeの構文を強調表示することで、これを明確に知ることができます。単語の区切りを防ぐには、二重引用符を使用してください。

また、呼び出しを使用すると引用bash -c符を直接処理する必要がありますが、ファイル名に二重引用符が含まれていると問題が発生する可能性があります。使用せずにパラメータを直接渡してください。

find "/mnt/Data/Shared/$1" -type d -exec fixperm "$1" fd {} \;

おすすめ記事