shell脚本中的字符串重复

时间:2018-03-19 09:15:50

标签: shell sh

我遇到了一点麻烦。我刚刚编写了一个简单的shell脚本来显示maven在文件中的一些依赖关系。它工作正常。但唯一的问题。在此过程中,我将显示有关此流程进度的信息等(我在下面的示例中对此进行了描述)。我使用printf显示的其中一行是重复的,它看起来像:

  

在../ path / all_dependencies.txt

中编写依赖项      

- 使用" mvn依赖:树-Dverbose" .....

     

- 使用" mvn依赖:树-Dverbose -Dincludes = javax.servlet" .....

我无法理解为什么会在此处显示其他行。我在互联网上透露了很多消息来源,但没有发现我需要挖掘的方向。我想它可能会受到进度条的影响,但无法理解究竟是怎样的。

还有什么有趣的,为什么我会得到不同的线条?也许它是数组如何工作的一个特征?...

我将不胜感激任何帮助/解释等等。

这是我的剧本,我在遇到问题之前添加了评论:

#!/bin/sh
start=$(date)
printf "\n Show dependencies from all projects \n $start"
printf "\n -----------------------------------"

#Paths to catalogs
PATH1=..some/path1
PATH2=..some/path2
PATH3=..some/path3

green='\033[0;32m'
red='\033[0;31'
nc='\033[0m'

#  mvn_params represents Maven Parametrs options
#  you can specify here all params you want to use when dependency tree will be applied
#
# E.G: -Dverbose -Dincludes=javax.servlet
#
if [ "$#" -eq 0 ]; then
    maven_params=""
else
    maven_params=( "$@" )
fi

array=(
    $PATH1
    $PATH2
    $PATH3
    )

cp /dev/null all-dependencies.txt

for element in ${array[@]}; do
    module=$element
    if [ -d "$module" ]; then
        cd $element
        full_path="dependencies.txt"
        printf "\n Writing dependencies in $module/$full_path"
        #  A duplicated line is below           
        printf "\n  -- Applying with \"mvn dependency:tree %s \"....." "${maven_params[@]}"

        sp='/-\|'
        printf ' '
        mvn dependency:tree "${maven_params[@]}" > $full_path &
        while [[ -n $(jobs -r) ]]; do
            printf '\b%.1s' "$sp"
            sp=${sp#?}${sp%???}
        done

        status_maven=$?
        cat $full_path >> ../all-dependencies.txt 
        if [ $status_maven -eq 0 ]; then
            printf "\b%.1s ${green}\\u2714${nc} Done\n"
        else
            printf "\b%.1s ${red}\\u274C${nc} Failed\n"
        fi
    else
        printf "\n ${red}\\u274C Failed. ${nc} $module: No such file or directory\n"
    fi

done
printf "\n ${green}DONE:${nc} File with all dependencies has been created: all-dependencies.txt"
exit 0

2 个答案:

答案 0 :(得分:3)

您看到的行为可以通过此示例演示:

printf "\nParameter: %s\n" a b c

如果您只有一个格式代码(此处为:%s),但是将多个参数传递给printf,则该字符串将被反复使用,因此该语句的输出为:< / p>

Parameter: a

Parameter: b

Parameter: c

在您的情况下,这意味着数组maven_params包含两个元素。

答案 1 :(得分:1)

感谢user1934428,我能够考虑shell中的数组元素表示。我找到了一个简单的解决方 我希望对那些也在寻找答案的人有所帮助。

SOLUTION:

就我而言,我写了"${maven_params[@]}",其中[@]表示彼此分开的所有参数。我不得不使用[*]代替。它提供了像$1$2等等一样使用数组元素。

  

&#34; $ @&#34;将每个元素扩展为单独的参数,而&#34; $ *&#34;扩展到args合并为一个参数