知道linux 脚本中 ${#xxx[@]} 是什么意思吗?

知道linux 脚本中 ${#xxx[@]} 是什么意思吗?,第1张

题主你好,

xxx应该是一个数组, ${#xxx[@]}应该是输出xxx数组中元素的个数.

我举了个例子,题主可以参考一下:

希望可以帮到题主, 欢迎追问.

首先,0x50比50大,其次你程序定义的两个指针无法存放字符串,只能用来指向一个已经存在的字符串。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main() { char data[0x50+1]={0}int i

for ( i=0i<0x50i++ ) data[i]=i+1

data[i]=0

printf("%s\n",data)

return 0

}

不是test失效, 而是 test 命令没有得到足够的参数.

原因是shell 在解释命令时, 会"先"对命令行进行扩展, 使用变量实际的值替换到命令行中, 然后再执行命令.

上面unset name后, $name的值为空, 执行完命令行扩展后, 实际执行的是

test -z && echo "empty" || echo "not empty"

此时, shell 实际传给test 命令的参数只有一个 "-z",  这种情况下, test 的退出码总是0

所以在执行的时候, 使用双引号将变量名引起来是个好习惯, 这样命令行扩展后实际传给test的参数为2个(尽管第2个只是一个空字符串)

关于shell 的命令行扩展, 除了变量, 还有一些其它的工作,

见下例: a.sh

#!/bin/bash

echo $#

echo $@

执行 ./a.sh a{1,2,3} 输出为

./a.sh a{1,2,3}

3

a1 a2 a3

看起来是传给命令行一个参数 a{1,2,3}, 实际上执行完shell 扩展后, 传给a.sh 的参数是 a1 a2 a3 共3个参数.

关于shell 扩展的更多细节, 详见bash 的man page的 EXPANSION 这一节.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8257776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存