![`svn status -uq` 的输出在脚本中没有换行符](https://linux22.com/image/1360746/%60svn%20status%20-uq%60%20%E7%9A%84%E8%BE%93%E5%87%BA%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%B2%A1%E6%9C%89%E6%8D%A2%E8%A1%8C%E7%AC%A6.png)
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 $status
,echo
将会被像这样调用:
echo M * 764 update \
Status against revision: 771
这不止一个参数,因为 Bash 使用空格 (看$IFS
)。echo
将打印每个参数,并以一个空格分隔,因此尽管该行的其余部分看起来不错,但换行符实际上将被折叠为一个空格。
如果用引号括住参数,echo
则只会将其视为一个参数并再次正确输出。
Bash Wiki 有引文阅读佳作并列出了你应该总是除少数例外情况外,引用您的变量。