gpt4 book ai didi

linux - 参数扩展

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:20 27 4
gpt4 key购买 nike

我正在尝试在 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'

一旦分配生效,字符串的长度将不再为零。

关于linux - 参数扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31769437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com