所以,我是使用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循环中的变量作为空白字符。就是这样。谢谢。
答案 0 :(得分:3)
使用bash,您可以使用parameter substitution和pattern matching
一次性完成所有操作str="i am full of spaces"
dashes="${str//[[:blank:]]/-}"
echo "$dashes" # i-am-full-of-spaces
答案 1 :(得分:3)
我听到你了,你不想“完全重构你的代码”。但改变你的5行for / while imbrication以获得更具可读性的东西将不具备“完全重组”的条件。
在bash中使用短划线替换所有空格非常简单,给定变量str
,只需执行:
str=${str// /-}
这将取代所有出现''with' - '。
人们倾向于使用辅助工具,如tr,awk和sed,其中bash可以更快地执行相同的工作并使用更清晰的代码,请查看:http://wiki.bash-hackers.org/syntax/pe