这是我在函数中的代码
function safeChmod_ProcessOctalModes() {
local i=0
local targetpermission=""
local chmod_param=$1
# local folder_chmod_param=`echo $chmod_param | fold -w1`
# echo xxxxxxxxxxxx=$folder_chmod_param >/dev/tty
echo -n "$chmod_param" | \
while read -n 1 ch;
do
if [ $i -eq 0 ]
then
i=$(( i+1 ))
continue
fi
i=$(( i+1 ))
if [ $ch -eq 0 ]
then
targetpermission=($targetpermission"---")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 1 ]
then
targetpermission=($targetpermission"--x")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 2 ]
then
targetpermission=($targetpermission"-w-")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 3 ]
then
targetpermission=($targetpermission"-wx")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 4 ]
then
targetpermission=($targetpermission"r--")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 5 ]
then
targetpermission=($targetpermission"r-x")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 6 ]
then
targetpermission=($targetpermission"rw-")
echo tp=$targetpermission >/dev/tty
elif [ $ch -eq 7 ]
then
targetpermission=($targetpermission"rwx")
echo tp=$targetpermission >/dev/tty
fi
done
echo tp_in_func=$targetpermission >/dev/tty
echo $targetpermission
return 0;
}
直到我在while循环中,targetpermission
变量才能正确填充。但是,一旦循环完成,targetpermission
就没有了。
这是输出。
chmod_param=0700
tp=rwx
tp=rwx---
tp=rwx------
tp_in_func=
为什么会这样?如何在while循环之外保留targetpermission
变量的赋值?
答案 0 :(得分:2)
变化:
echo -n "$chmod_param" | \
while read -n 1 ch; do
#...
done
到
while read -n 1 ch; do
#...
done <<<"$chmod_param"
或更一般地说:
while read -n 1 ch; do
#...
done < <( echo -n "$chmod_param" )
防止子shell创建导致while循环的管道结果。
答案 1 :(得分:1)
我之前看到过这样的行为,这是由于bash中的某些构造创建了一个新的上下文。基本上任何创建另一个shell的东西,比如反引号运算符或$()运算符都有自己的上下文。在你的情况下,我认为它可能是由echo提供的while循环。