繁体   English   中英

参数扩展

[英]Parameter expansion

我正在shell中尝试以下代码进行参数扩展

#!/bin/sh
count
echo ${count:-60}
echo ${count:=120}
echo $count
echo ${count:+80}
x = 'The host name is google'
echo ${#x}

产量

./test_varexp.sh: line 2: count: command not found
60
120
120
80
./test_varexp.sh: line 7: x: command not found
0

使用上面的代码和上下文输出,我有以下问题;

  1. 带'='符号的参数扩展应将count的值设置为120,这在我们打印count的值时也被视为发生,但是在下一行中,当我将其与“ +”一起使用时,它将被覆盖应该只检查是否存在。 有人可以解释这个异常吗? 或有人可以解释计数是否确实存在吗?

  2. ${#x}的参数扩展根本不起作用。 有人可以告诉我是否存在语法错误吗?

我正在尝试上面的代码

[root@dtltrhel5u8 shellscripts]# uname -a
Linux dtltrhel5u8 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

您在这里混淆了许多问题。 Shell将标记您在空白上(或通常在IFS ,但要遵守任何引号)的输入,并按该顺序查找分配和命令。 如果第一个标记包含=则它是一个赋值,后面可以跟有其他赋值或命令。 如果不是,则为命令,其余参数均为命令参数。 (曾经有一段时间分配也可以跟随命令,并且有一些方法可以使现代的shell表现得如此,以实现向后兼容;但是让我们忽略那个旁白。)

因此count是一个命令,显然不存在。 也许您是想用count=来定义不带值的变量(这与未设置变量不同)。

如果设置了变量并且为非空,则扩展${count:+80}会产生值80 这正是您得到的。 如果变量为空或未设置,则将替换为空字符串。

如果您想再次给x赋值,则等号和该值必须是第一个标记的一部分; 所以

x='The host name is google'

分配成功后,字符串的长度将不再为零。

您的第一个问题可以通过http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html文档轻松解释

具体来说, ${count:+80}如果没有返回count未设置,和80 ,如果它被设置。 count的值仍为120。

您的其他语法错误是,您不应在=周围放置空格。

x='The host name is google'
echo ${#x}

打印23

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM