2016-09-12 3 views
0

ここは新しいです。私はAndroidのためのde-bloatスクリプトを書こうとしています。以下 が私のコードです: -FORループでスペースを読み取る方法

#/system/bin/sh 
clear 
list=$(cat <<'EOF' 
Beauty\ Plus 
blackmart 
Cam\ Scanner 
Tencent 
EOF 
) 

for f in $(echo "$list"); 
do 
if [ -e /sdcard/$f* ]; 
    then 
    rm -rf /sdcard/$f* 
    echo -e "Deleted /sdcard/$f*." 
else 
    echo -e "/sdcard/$f* not found." 
fi 
done 

は今ここに問題がある、それは別のエントリとしてスペースで発生の両方を読み込みます。引用符で囲まれた変数でエコーを使用するようにしました。

私はちょうどその後

echo "$list" 

をしようとすると、それは、所望の出力を提供します。私はまた、使用しようとしました

echo "$list" | while read f 
do 
echo $f 
done 

しかし、それは同じ出力を与えます。 これを手伝ってください。

for f in $(echo "list"); 
do 
rm -rf /sdcard/$f 
echo -e "Removed \/sdcard\/$f" 
done 

ありがとう - は:として私は、さらにコードを書くように

Beauty\ Circle 
Cam\ Scanner 

- : 出力は次のようにする必要があります。

PS:私はあなたが本当に(配列をサポートしていませんシェルであるかもしれない)/bin/shでスクリプトを実行する必要がある場合は

rm -rf /sdcard/$f* 
+0

この質問は、引数だけでなくコマンドライン全体を保存することに重点を置いています。 – chepner

答えて

2

を使用したくない、あなたはwhileループを使用する必要があります

while IFS= read -r f; do 
    rm -rf /sdcard/"$f" 
    printf 'Removed /sdcard/%s\n' "$f" 
done <<EOF 
Beauty Plus 
blackmart 
Cam Scanner 
Tencent 
EOF 

あなたが#!/bin/bashを使用することができるなら、あなたが代わりに通常のパラメータの配列を反復処理するforループを使用することができます。代わりにforループの。

list=("Beauty Plus" 
blackmart 
"Cam Scanner" 
Tencent 
) 
for f in "${list[@]}"; do 
    rm -rf /sdcard/"$f" 
    printf 'Removed /sdcard/%s\n' "$f" 
done 
関連する問題