如何在回声和bash中不逃避空格和反斜杠?

问题描述 投票:0回答:1

我将两个位置args传递给脚本来运行,两个args都是路径,而在分析路径的场景中,问题有时出在某些路径上,例如:m i sc . . . . .. . .它具有点和空格,并且有时甚至在目录名中也有一个反斜杠。

试图通过两个过程直接或通过at sign获得参数。

SOURCE_ARG=$1
DESTINATION_ARG=$2

ARG_COUNT=0
for POSITIONAL_ARGUMENTS in "${@}"
do
    ((ARG_COUNT++))
    ARGUMENT_ARRAY[$ARG_COUNT]=$POSITIONAL_ARGUMENTS
done

在循环中,我遍历转发给他们的命令的结果。

while IFS= read -r dir
do
    echo "${ARGUMENT_ARRAY[1]}"
    echo "${dir}"
    while IFS= read -r item
    do

       # do some stuff

    done < <(ls -A "$dir"/)
done < <(du -hP "$SOURCE_ARG" | awk '{$1=""; print $0}' | grep -v "^.$" | sed "s/^ //g")

当我使用echo "${ARGUMENT_ARRAY[1]}"时,我得到的路径与我需要检查的路径相同,但是在这里使用循环迭代变量作为dir时-> echo "${dir}"我使所有空格都转义了,因为该路径的其他命令无法执行职位。

我要问的是如何在循环内获取$dir的输出,就像我上面提到的echo "${ARGUMENT_ARRAY[1]}"(输入所有空格和反斜杠)一样

linux bash shell command-line-arguments
1个回答
0
投票

感谢@Barmar,如注释中所述,这是du的问题,当我将命令更改为find时,问题消失了。

> The only reason why $dir would have escape in it is because du is
> printing the filenames with escapes. But AFAIK it doesn't do that. –
> Barmar 17 hours ago
> 
> 
> Why are you using du if you're not interested in the usage column? If
> you just want a list of directories, use find "$SOURCE_ARG" -type d –
> Barmar 17 hours ago
© www.soinside.com 2019 - 2024. All rights reserved.