如何在bash中打印数组中的字符串?
问题的出现原因是没有对字符串进行引用,导致出现了shell word splitting的问题。解决方法是对字符串进行引用,可以使用双引号或者printf函数。
具体的解决方法如下:
1. 使用双引号对字符串进行引用:
$ for line in "${arr[@]}"; do echo "$line"; done
2. 使用printf函数对字符串进行引用:
$ printf '%s\n' "${arr[@]}"
输出结果为:
hello hello bye bye
另外,还提到了在包含空格或特殊字符的字面量和每个扩展中都应该使用双引号进行引用,例如:`"$var"`, `$(command "$var")`, `${array[@]}`, `a & b`。对于代码或字面量中的变量,可以使用单引号进行引用,例如:`'Costs $5 US'`, `ssh host 'echo "$HOSTNAME"'`。
还介绍了`$@`和`$*`之间的区别,`"$@"`会将每个位置参数扩展为它自己的参数,而`"$*"`会将所有位置参数扩展为单个参数。未引用的`$@`和`$*`是未定义的,不应使用。对于数组,也是同样的情况,应该使用`"${array[@]}"`。
最后,提供了一些相关链接供进一步了解。
解决了问题后,还有其他问题需要帮助。