将转义重新插入到文件名中,并通过bash脚本将空格打印到终端

时间:2012-02-24 13:19:58

标签: bash shell

我的bash脚本获取带有空格和其他奇数字符的文件名。

如何将这些文件名打印回终端,并在正确的位置使用转义符,以便用户可以复制并重新调整文件名,以便可以将其作为参数重新用于相同或另一个脚本?< / p>

我写了一个测试脚本,内容如下:

    #! /bin/bash

    echo ""
    echo "testing the insertion of '\' in filenames having spaces"
    echo "the parameter you gave was: '$1'"
    echo "when printed directly the filename looks like: '$1'"
    echo "when printed with echo \$(printf '%q' $x) it looks like: " $(printf '%q' $1)

运行脚本如下:

    bash test.sh this\ filename\ has\ spaces
    testing the insertion of '\' in filenames having spaces

    the parameter you gave was: 'this filename has spaces'
    when printed directly the filename looks like: 'this filename has spaces'
    when printed with echo $(printf '%q' ) it looks like:  thisfilenamehasspaces

我想看到脚本产生的是:

    when printed directly the filename looks like: 'this\ filename\ has\ spaces'

似乎很简单,但Google很难形成这个问题。所有帮助赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

此:

printf '%q' $1

意味着:

printf '%q' this filename has spaces

,因为printf '%q'连接其参数,意味着:

printf '%q' thisfilenamehasspaces

你想要的是这个:

printf '%q' "$1"

告诉printf '%q' this filename has spaces是一个参数,所以它会引用里面的空格。

我还建议将命令替换放在双引号中:

echo "when printed with echo \$(printf '%q' $x) it looks like: $(printf '%q' "$1")"

在这种情况下似乎没有必要,但如果文件名中有一个字符导致printf '%q'使用$'...' - 样式引用而不是反斜杠,那么将是必要的。