2009-07-27 113 views
0

我已经继承了一个shell脚本。它所做的一件事就是解析一个文件名列表。对于列表中的每个文件名它下面的命令:bash参数扩展更改原始字符串

fs_item="`echo ${fs_item%/}`" 

此命令替换文件名的空间与一个空间(从做它的工作,在这种情况下,我认为,是消除最后一个斜线之后的所有部分) :

in: aa bbbb    ccc 
out: aa bbbb ccc 

从这一点起,文件名已损坏。

所以,问题是:我可以以某种方式告诉bash不要取代空格吗?

+0

这个我不清楚..如果你不想要行fs_item =“`echo $ {fs_item%/}`”来替换空格,那么删除那一行。 – nos 2009-07-27 14:55:17

+0

我已添加评论。该命令出于其他原因,bot替换空格 – 2009-07-27 15:02:21

回答

0

回声真的有必要吗?你可以简单地将其删除:

fs_item="${fs_item%/}" 

如果你的实际的问题是不同的东西,你无法摆脱的回声(或其他一些命令调用),加入一些报价应该工作:

fs_item="`echo \"${fs_item%/}\"`" 

运行反拨命令echo时,空间消失。内部字段分隔符包含空格字符,因此由一个或多个空格序列分隔的单词将作为单独参数传递给echo。然后,echo只打印它由一个空格分隔的参数。

由于我们的内部字段分隔主体,改变了IFS也应该工作(但通常有其他可能的不良影响的其他地方在你的脚本):

IFS=$'\n' 

该内部磁场分离器设置到换行符。在此之后,空间不再被视为列表的分隔符。 echo命令将只接收一个参数(除非您的文件名中带有换行符),并且空格将保持不变。

0

尝试将IFS设置为其他内容,例如IFS =“,”

1

摆脱反引号和回声命令。在这种情况下,它比无用的更糟糕,因为它没有增加任何内容,并导致您在此尝试解决的问题。

fs_item="${fs_item%/}"