如果我的变量在shell脚本中保存换行符,我如何比较

Inv*_*tus 1 shell scripting

我有一个脚本,其中我有一行,它确实将第三行放入我的变量中,如下所示:

variable=`sed -n '3 p' /home/nmsadm/abc.txt`
Run Code Online (Sandbox Code Playgroud)

所以variable保持这个值在abc.txt的第三行.在我的例子中,它将是一个单词行或空/空行.

如何比较shell脚本中的变量以确定它是否为空/空行? echo $variable我找到了一条空行.

我需要在这里进行比较,以确保这是一条空线?像这样的东西:

if [ "$variable" = "comparison" ]; then
Run Code Online (Sandbox Code Playgroud)

l0b*_*0b0 6

空或未定义:

if [ -z "${variable-}" ]
Run Code Online (Sandbox Code Playgroud)

单个换行符:

if [ "${variable-}" = $'\n' ]
Run Code Online (Sandbox Code Playgroud)

未定义:

if [ "${variable+defined}" != defined ]
Run Code Online (Sandbox Code Playgroud)

注意,最后一个命令不是相反的

if [ "${variable-undefined}" = undefined ]
Run Code Online (Sandbox Code Playgroud)

要了解原因,请先尝试运行variable=undefined."${variable+defined}"只有两个可能的值:空字符串或defined.

  • +1.你只需要检查是否为空,因为命令替换(反引号)将剥离任何尾随的换行符(参见http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution) (3认同)