Shell脚本中的二维字符串列表

本文介绍如何在Shell脚本中实现二维字符串列表的定义与遍历,同时探讨了commandnotfound错误的常见原因及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、Shell脚本中的二维字符串列表

有这样一种需求,运行工具完成某项任务, 这项任务有多组参数,每组参数里包含了多个参数(即用多组不同的参数反复运行某个命令,每次命令运行需要指定多个参数),这里的参数就像一个二维字符串数组一样。如下面的CONFIG_PARAMETERS所示,共有两组参数mp4,2000k,vga,4:3和flv,500k, vga,4:3,它们之间用空格隔开,每组参数里有包含了4个参数值,它们之间用逗号隔开。

CONFIG_PARAMETERS=”mp4,2000k,vga,4:3 flv,500k, vga,4:3”

for CONFIG in $CONFIG_PARAMETERS
do

#回显每个参数组
echo $CONFIG
#将原来默认的分隔符备份到OLD_IFS
OLD_IFS=”$IFS”
#将分隔符设置为逗号
IFS=“,”
#以逗号分隔符对$CONFIG进行分割,将结构存入PARAMETERS数组
PARAMETERS=($CONFIG)
#恢复默认的分隔符,需要尽快恢复,如不恢复,可能导致后面命令执行错误
IFS=”$OLD_IFS”
#下面回显4个参数值,${PARAMETERS[@]}表示4个参数的列表可用for进行遍历:for PARAMETER in ${PARAMETERS[@]}
echo ${PARAMETERS[0]}
echo ${PARAMETERS[1]}
echo ${PARAMETERS[2]}
echo ${PARAMETERS[3]}
#这里构成的命令字符串只是为了演示,并不能真正运行起来
cmd=${PARAMETERS[0]}” ”${PARAMETERS[1]}” ”${PARAMETERS[2]}” ”${PARAMETERS[3]}
#执行命令字符串
`$cmd`

done

二、Shell脚本执行过程中的command not found错误

command not found错误可能由以下几种原因导致:
1. 脚本的权限不足,解决办法:chmod a+x script_name.sh或chmod 777 script_name.sh
2. 脚本文件的格式不正确,原因:脚本在windows环境下创建;解决办法:dos2unix scrip_name.sh或利用vim的:set fileformat=unix命令转换文件格式
3. 命令工具不在环境变量指定的路径下或未安装,解决办法:先手动运行脚本验证,可将命令工具拷贝至/usr/local/bin下或将命令工具所在路径添加到/etc/ld.so.conf文件中,然后运行ldconfig命令
4. 字符串分隔符的改变,原因:字符串分割符变化,无法正确分割出命令参数,如原来默认分割符为空格,重置为逗号后则不能解析出命令参数,导致command not found错误。解决办法:新分割符使用完毕后尽早恢复其原来的值。

转载于:https://www.cnblogs.com/dskit/archive/2012/08/21/2649990.html

### 如何在编程语言中传递一字符串数组给函数 #### C语言中的实现方式 在一字符串数组作为函数参数的情况下,在C语言里可以采用指针或者数组名的方式来进行传递。由于数组名称本质上是一个指向其首个元素的常量指针,因此可以直接将数组名作为实参传递给形参为相应类型的指针变量的函数[^1]。 当涉及到字符数组即字符串时,如果要向函数传递整个字符串,则通常会把该字符数组的名字当作参数传过去;而要是想让函数接收一个由多条字符串构成的一字符串数组的话,那么就需要传递指向字符型指针(char *)的指针(char **)或者是二维字符数组的名字[^2]。 下面给出一段简单的例子用于演示如何定义并调用接受一字符串数组作为参数的函数: ```c #include <stdio.h> // 定义处理字符串数组的函数原型 void processStrings(char *strings[], int count); int main() { char *stringArray[] = {"Hello", "World"}; int size = sizeof(stringArray)/sizeof(*stringArray); // 调用函数并将字符串数组以及大小作为参数传递 processStrings(stringArray, size); return 0; } // 实现处理字符串数组的具体逻辑 void processStrings(char *strings[], int count){ for(int i=0; i<count ;i++){ printf("%s\n", strings[i]); } } ``` 这段代码展示了怎样创建一个名为`processStrings` 的函数来接收一个包含若干个字符串的一数组及其长度,并通过遍历打印这些字符串的内容。 #### JavaScript 中的实现方法 对于JavaScript而言,虽然这里提到的是关于C语言的信息,但是为了提供更全面的理解,也简单介绍下JS的情况。在JavaScript环境中,可以通过多种途径完成这一操作,最常见的一种就是利用内置的对象结构——数组(Array) 来存储一组字符串值,之后再将其作为一个整体传递给某个自定义的方法或匿名函数[^3]。 例如: ```javascript function display(strings) { strings.forEach(function(item){ console.log(item); }); } let stringList = ['apple', 'banana']; display(stringList); ``` 此段脚本说明了如何构建一个能够迭代输出列表项内容的功能模块,并且成功实现了预期目标—- 将一系列文字信息打包送入指定位置执行特定任务。 #### Shell Scripting 下的操作指南 最后考虑到不同场景下的需求差异,还应该提及一下shell scripting方面的知识点。在编写bash shell script的时候,同样支持以数组形式管理多个同类型的数据单元,比如这里的字符串集合。此时可通过如下所示的方式来达成目的:先声明好待传输的目标容器(即数组),接着按照惯例设置好必要的入口点以便后续引用,最终借助于$@ 或者 "$@" 这样的特殊符号组合轻松搞定批量传送的工作流程[^4]。 示例代码片段如下: ```sh #!/bin/bash # 函数定义部分 print_strings(){ local arr=("$@") # 把所有参数都收集起来存放到局部范围内有效的新建数组之中 for str in "${arr[@]}"; do echo $str done } # 主程序区段 declare -a myarray=("first item" "second item") # 执行函数调用动作的同时附带上传递实际数据集 print_strings "${myarray[@]}" ``` 以上就是在几种主流编程环境下有关“如何在编程语言中传递一字符串数组给函数”的具体实践方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值