[英]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
使用上面的代码和上下文输出,我有以下问题;
带'='符号的参数扩展应将count的值设置为120,这在我们打印count的值时也被视为发生,但是在下一行中,当我将其与“ +”一起使用时,它将被覆盖应该只检查是否存在。 有人可以解释这个异常吗? 或有人可以解释计数是否确实存在吗?
${#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.