我的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很难形成这个问题。所有帮助赞赏。感谢。
答案 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'
使用$'...'
- 样式引用而不是反斜杠,那么将是必要的。