shell echo 易错点(踩坑)

切换命令行解析器:

# 查看默认解析器(只用来显示默认)
echo $SHELL
# 查看安装的解析器列表
cat /etc/shells
# 调用其他解析器(调用后进入解析器环境,但$SHELL不变)
/bin/dash

踩坑一: 无内容时输出空行

解析器:/bin/bash、/bin/dash
echo -n 输出结尾处不换行
异常示例脚本:

#!/bin/dash
line_count=$(echo "" | wc -l)
echo $line_count
echo "此时line_count=1"

正常示例脚本:

#!/bin/dash
line_count=$(echo -n "" | wc -l)
echo $line_count
echo "此时line_count=0"

踩坑二:换行被替换为空格

解析器:/bin/bash、/bin/dash
异常示例:

#!/bin/bash
host_script=$(cat <<EOF
\n
EOF
)
echo $host_script
echo "输出为一行"

正常示例:

#!/bin/bash
host_script=$(cat <<EOF
umount $image_path
mount $realy_mount_filesystem $image_path
EOF
)
echo "$host_script"
echo "添加双引号后,输出为多行"

踩坑三:特殊字符转义

注:解析器不同,效果不同。

  • /bin/bash解析器(通过“-e”参数转译,而与单双引号无关)

echo -e 处理特殊字符(只有/bin/bash解析器可用)
异常示例:

#!/bin/bash
host_script="\n"
echo $host_script
echo "输出为一行:\n"

正常示例:

#!/bin/bash
host_script='\n'
echo -e $host_script
echo "输出为两个空行"
  • /bin/dash解析器(双引号内转译,单引号内原样输出)

异常示例:

#!/bin/dash
host_script='\n'
echo $host_script
echo "输出为一行:\n"

正常示例:

#!/bin/dash
host_script="\n"
echo $host_script
echo "输出为两个空行"

参考链接:
Shell 切换解释器,查看当前解释器
Linux shell echo打印不出换行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值