我在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
答案 0 :(得分:3)
你在这里混淆了许多问题。 shell将在空白处(或通常在IFS
上标记化您的输入,但尊重任何引用)并按顺序查找分配和命令。如果第一个令牌包含=
,则它是一个赋值,后面可能会有进一步的赋值或命令。如果没有,则它是一个命令,任何剩余的参数都是命令参数。 (曾经有一段时间,分配也可以遵循一个命令,并且有一些方法可以使现代shell表现得像这样,为了向后兼容;但是让我们忽略那个侧面轨道。)
所以count
是一个命令,显然不存在。也许你的意思是count=
来定义没有值的变量(这与不设置它有所不同)。
如果变量设置且非空,则扩展${count:+80}
生成值80
;这正是你得到的。如果变量为空或未设置,则替换为空字符串。
如果您想为x
分配一个值,那么等号和值必须是第一个令牌的一部分;所以
x='The host name is google'
分配工作后,字符串的长度将不再为零。
答案 1 :(得分:1)
文档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
打印composer.json
。