对Bash中的可变范围感到困惑

阿努

这是我在函数内的代码

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=

为什么会这样呢?如何targetpermission在while循环外保留变量的赋值?

PSkocik

改变:

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" )

以防止子管道的创建,这会导致管道进入while循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对Bash中的方括号感到困惑

来自分类Dev

对F#中的“不可变”列表感到困惑

来自分类Dev

对数字的值和C中的数字范围感到困惑

来自分类Dev

在Bash脚本中对此“ find”命令感到困惑吗?

来自分类Dev

我对bash中双引号的用法感到困惑

来自分类Dev

仍然对Objective C变量范围感到困惑

来自分类Dev

javascript变量范围使我感到困惑

来自分类Dev

对Ubuntu中的分区感到困惑

来自分类Dev

对Ubuntu中的分区感到困惑

来自分类Dev

对Java中的内存感到困惑

来自分类Dev

对C中的for循环感到困惑

来自分类Dev

bash中的getopts,脚本以前工作过,现在我感到困惑

来自分类Dev

为什么我感到困惑“当命令在BASH中失败时,退出状态代码为0”

来自分类Dev

Bash可变范围泄漏

来自分类Dev

对Java中的`toArray(T [] a)`方法感到困惑

来自分类Dev

对Android中的触觉反馈感到困惑

来自分类Dev

对Django中的ForeignKey模型关系感到困惑

来自分类Dev

对在git中创建嵌套分支感到困惑

来自分类Dev

对汇编中的指针和值感到困惑

来自分类Dev

对R中函数的重载解析感到困惑?

来自分类Dev

对数组中的BinarySearch感到困惑

来自分类Dev

对C ++中的虚拟基类感到困惑

来自分类Dev

对C中的此语句感到困惑?

来自分类Dev

对Zookeeper中的交易日志感到困惑

来自分类Dev

对__import__在Python中感到困惑

来自分类Dev

对Ruby中的块行为感到困惑

来自分类Dev

对Groovy MOP中的invokeMethod方法感到困惑

来自分类Dev

在vim中折叠代码使我感到困惑

来自分类Dev

对C编程中的“僵尸进程”感到困惑