切换命令行解析器:
# 查看默认解析器(只用来显示默认)
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 "输出为两个空行"