我是新来的。我正在尝试为Android编写一个de-bloat脚本。 以下是我的代码: -
#/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。
如果我尝试
echo "$list"
然后,它给出了所需的输出。我也尝试过使用
echo "$list" | while read f
do
echo $f
done
但是,它也提供相同的输出。 请帮我解决一下这个。 输出应该是这样的: -
Beauty\ Circle
Cam\ Scanner
所以我将我的进一步代码编写为: -
for f in $(echo "list");
do
rm -rf /sdcard/$f
echo -e "Removed \/sdcard\/$f"
done
谢谢。
P.S:我不想用
rm -rf /sdcard/$f*
答案 0 :(得分:2)
如果您确实需要使用/bin/sh
(可能是不支持数组的shell)运行脚本,则需要使用while
循环而不是for
循环:
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
循环迭代数组而不是常规参数。
list=( "Beauty Plus"
blackmart
"Cam Scanner"
Tencent
)
for f in "${list[@]}"; do
rm -rf /sdcard/"$f"
printf 'Removed /sdcard/%s\n' "$f"
done