逃离空白角色

时间:2014-10-07 22:37:10

标签: string bash

所以,我是使用bash脚本的新手,但我是一名经验丰富的Java程序员。我试图通过一个查看每个字符的循环来评估一个字符串。然后它需要用连字符替换所有空格(" - ")。这是我的代码:

for a in "${newdirectory[@]}"; do
str="LDAUU_"
str+=$a
echo $str | awk -v ORS="" '{ gsub(/./,"&\n") ; print }' | \
while read char
do
if [[ $char == "whitespacecharacter" ]]
then
str+="-"
else
str+=$char
fi
done

newdirectory变量是一个用户输入数组,最初是一个使用分隔符",#34;分隔成新目录数组的变量。 for循环也会继续,但它与脚本的这一部分无关。 另外,我不想完全重构我的代码。我需要的东西只是评估" char" while循环中的变量作为空白字符。就是这样。谢谢。

2 个答案:

答案 0 :(得分:3)

使用bash,您可以使用parameter substitutionpattern matching

一次性完成所有操作
str="i am full of spaces"
dashes="${str//[[:blank:]]/-}"
echo "$dashes"                  # i-am-full-of-spaces

除了手册(上面引用)之外,BashGuideBashFAQ是很好的资源  用于bash编程。

答案 1 :(得分:3)

我听到你了,你不想“完全重构你的代码”。但改变你的5行for / while imbrication以获得更具可读性的东西将不具备“完全重组”的条件。

在bash中使用短划线替换所有空格非常简单,给定变量str,只需执行:

str=${str// /-}

这将取代所有出现''with' - '。

人们倾向于使用辅助工具,如tr,awk和sed,其中bash可以更快地执行相同的工作并使用更清晰的代码,请查看:http://wiki.bash-hackers.org/syntax/pe