从零开发Shell时,空引号对应的char** token数组应存储什么内容
Shell解析空引号的token存储规则
你给出的运行示例已经明确了行为逻辑:echo "" "" "" | cat -e输出三个空格加行尾标记$,本质是echo命令收到了三个独立的参数,参数之间用空格分隔后输出,说明三个空引号都被识别为了有效参数。
所以你存储token的char**数组对应位置,应当存储长度为0的空字符串,也就是首字节为\0的C字符串,既不能直接跳过该token,也不能存储NULL指针。
- 空引号(单引号、双引号通用)属于合法的参数占位,只要引号配对成功,就算中间没有内容也要作为独立token保留
- 空字符串的实现可以直接申请1字节内存,将首位置为
\0即可 - 如果存为
NULL指针,大部分命令处理参数时遇到NULL会直接终止解析,就会出现参数丢失的情况,和你给出的示例运行结果不符
验证小技巧:你可以在原生Bash中执行
test_arr=("" "" ""); echo ${#test_arr[@]},输出结果为3,也能证明三个空引号会被解析为三个独立的空字符串参数。
内容的提问来源于stack exchange,提问作者Myno
相关产品推荐
相关产品推荐

