0

スペースが含まれている一連のファイルとディレクトリの名前を変更しています。次のようなディレクトリのリストがあります。

"/usr/home/name/directory a/"
"/usr/home/name/directory b/"

等...

それらはすべて二重引用符で囲まれているため、for ループを使用してそれぞれを操作できます。その部分はうまく機能しています。問題は、次のようなファイルもあるということです。

"/usr/home/name/directory a/file a"
"/usr/home/name/directory b/file b"

等...

ファイルがあるディレクトリが書き込み可能であることを確認する必要があります。そのために、次のような文字列から dirname を取得しています。

dnam=$(dirname $1)

そして、それは機能します...ある程度まで。最終結果は、最後の二重引用符も切り捨てられ、次のようになります。

"/usr/home/name/directory a
"/usr/home/name/directory b

等...

実際の名前変更部分に移動できるようにするには、最終的な見積もりが必要ですが、その方法がわかりません。私が見落としているのは単純なことだと確信しています。誰か記入してくれませんか?

4

3 に答える 3

2

安全のために、他に何もない場合は、次を使用します。

dnam=$(dirname "$1")

変数を二重引用符で囲みます。

次のようにして、その結果に二重引用符を追加できます。

dnam=$(dirname "$1")'"'

または同等の表記の数。ただし、値に二重引用符を付けずに、名前を別の方法で処理する必要があるのではないかと思います。つまり、次の場合があります。

dir1="/usr/home/name/directory a"
file1="$dir1/file a"

これらのいずれかをコマンドに渡す必要がある場合は、二重引用符で囲みます。

dnam=$(dirname "$file1")

cd "$dnam"

そのような名前のリストを扱っている場合は、配列を使用してから、次のような表記法を使用します。

a=( "$dir1" "$dir2" )

ls -ld "${a[@]}"
于 2013-04-03T05:26:54.957 に答える
1

一見すると、スクリプト内の二重引用符をエスケープするには、バック スラッシュを追加する必要があるように見えます。

于 2013-04-03T05:26:44.157 に答える
0

サブシェルを必要としない短いバージョン:

dnam=${1%/*}\"

パラメータ置換は、ユーティリティ dirname と同じ効果があります。パス内の空白で機能します。最後の引用符はエスケープするだけです。

于 2013-04-03T10:02:41.557 に答える