`svn status -uq` 的输出在脚本中没有换行符

`svn status -uq` 的输出在脚本中没有换行符
function runstatus {
    echo "SVN Status -uq:"
    echo 
    status=$(svn status -uq)
    echo $status
    echo $bigline
}

这将打印类似以下内容的内容:

SVN 状态 -uq:

rd_backup rd_backup.sh 更新 764 更新修订状态:771

而通常情况下,手动运行命令而不是./update,它看起来像:

svn 状态 -uq

M*764 更新

修订状态:771

即使用换行符。如何确保在从脚本运行时格式保持不变且清晰易读?

答案1

如果您希望函数仅显示命令的输出,则无需捕获输出然后echo 再次显示它。

直接运行即可svn status -uq。stdout 也将从函数调用中输出。


如果您确实需要使用变量和echo它们,则需要引用传递给的参数,echo如果您希望保留空格:echo "$status"

原因是它将$status实际包含以下内容:

M * 764 update
Status against revision: 771

当你运行的时候echo $statusecho将会被像这样调用:

echo M * 764 update \
Status against revision: 771

这不止一个参数,因为 Bash 使用空格 ($IFS)。echo将打印每个参数,并以一个空格分隔,因此尽管该行的其余部分看起来不错,但换行符实际上将被折叠为一个空格。

如果用引号括住参数,echo则只会将其视为一个参数并再次正确输出。

Bash Wiki 有引文阅读佳作并列出了你应该总是除少数例外情况外,引用您的变量。

相关内容