代码之家  ›  专栏  ›  技术社区  ›  NawaMan

Bash:变量值中的空格,以后用作参数

  •  6
  • NawaMan  · 技术社区  · 16 年前

    在编写bash脚本帮助创建宝丽来缩略图使用Imagick的 convert 命令。我遇到了一个问题。尽管如此,我还是设法解决了这个问题(实际上,因为 转换

    因此基本上,bash脚本将获得一个可能包含空格的标题值。我想用这个标题作为 转换 . 如果标题为空(“”),我将不使用选项“-caption”作为convert命令。这样地:

    CAPTION="Is this Cute?" # The actual value will be tacked from the parameter of this bash.
    IN_FILE="resources/puppy.png"
    OUTFILE="resources/puppy_polaroid.png"
    
    # If CAPTION is not empty, reformat CAPTION
    if [ "$CAPTION" != "" ]; then CAPTION="-caption \"$CAPTION\""; fi
    # otherwise, do not use '-caption' add all
    
    COMMAND="convert $CAPTION \"$IN_FILE\" \"$OUTFILE\""
    echo "Command: $COMMAND" #This echo a value command
    `$COMMAND`

    echo回显可以复制的值命令,可以粘贴到终端并运行。但是狂欢并没有开始。我怎么能做到?

    转换 -caption "" 做这个工作。我知道这一点,目前正在使用这个作为解决办法。

    提前谢谢你的帮助。

    编辑: 从答案来看,这是现在对我有效的代码。

    ... # Get CAPTION and GRAVITY from parameters
    
    if [ "$CAPTION" != "" ]; then ARGS_CAPTION=(-caption "$CAPTION"); fi
    if [ "$GRAVITY" != "" ]; then ARGS_GRAVITY=(-gravity "$GRAVITY"); fi
    
    if [ ! -f "$IN_FILE"  ]; then echo "The input file does not exist: '$IN_FILE'"; exit; fi
    if [ "$OUTFILE" == "" ]; then OUTFILE=${IN_FILE%.*}-${IN_FILE#*.}-polaroid.png; fi
    
    ARGS=("${ARGS_CAPTION[@]}" -thumbnail 480x480 -border 5x5 -pointsize 60 "${ARGS_GRAVITY[@]}" +polaroid -thumbnail 120x120)
    echo convert "${ARGS[@]}" "$IN_FILE" "$OUTFILE";
    convert "${ARGS[@]}" "$IN_FILE" "$OUTFILE"

    4 回复  |  直到 16 年前
        1
  •  10
  •   JasonMArcher TWE    11 年前

    你会想读书的 entry 050 BASH FAQ

    我试图把一个命令放在一个变量中,但复杂的情况总是失败!

    ...

    1. 我正在基于运行时才知道的信息构造一个命令

    如果需要动态创建命令,请将每个参数放在数组的单独元素中。带有数组的shell(如Bash)使这变得更容易。posixsh没有数组,因此最接近的方法是在位置参数中建立元素列表。以下是上一节中sendto函数的POSIX sh版本:

        2
  •  2
  •   Charles Duffy    16 年前

    #!/bin/bash
    # ^^^ - note the shebang line explicitly using bash, not /bin/sh
    
    CAPTION="Is this Cute?" # The actual value will be tacked from the parameter of this bash.
    IN_FILE="resources/puppy.png"
    OUTFILE="resources/puppy_polaroid.png"
    
    extra_args=( )
    if [[ $CAPTION ]] ; then
      extra_args+=( -caption "$1" )
    fi
    convert "${extra_args[@]}" "$INFILE" "$OUTFILE"
    

    这个构造假定您可能会附加许多额外的参数。请注意 += extra_args=( "${extra_args[@]}" -caption "$1" ) 附加到数组。

        3
  •  1
  •   Dennis Williamson    16 年前

    $COMMAND 最后一行导致脚本尝试执行 输出

    $ c='echo hi'
    $ `$c`
    hi: command not found
    

    这将起作用:

    if [[ "$CAPTION" != "" ]]
    then
        convert -caption "$CAPTION" "$IN_FILE" "$OUTFILE"
    else
        convert "$IN_FILE" "$OUTFILE"
    fi
    
        4
  •  -1
  •   ghostdog74    16 年前
    CAPTION="$1"
    IN_FILE="resources/puppy.png"
    OUTFILE="resources/puppy_polaroid.png"
    
    case "$CAPTION" in
      "" ) CAPTION="-caption ''";;
      * ) CAPTION='-caption "$CAPTION"';;
    esac
    
    convert $CAPTION "$IN_FILE" "$OUTFILE"
    
    推荐文章