Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 遍历变量_Bash_Scripting - Fatal编程技术网

Bash 遍历变量

Bash 遍历变量,bash,scripting,Bash,Scripting,我有一个名为“files”的变量,其中包含/data/jane\u profile\u 07272018.doc/data/jane\u pic\u 07282018.jpg/data/jane\u contact\u 07292018.csv目录和名称 现在我需要遍历文件中的项目变量并打印它 我试过: #!/bin/bash for i in $files; do echo item: $i done (1) 首先,将名称列表存储在单个字符串中是一种糟糕的做法。不要这样做——使用数

我有一个名为“files”的变量,其中包含
/data/jane\u profile\u 07272018.doc/data/jane\u pic\u 07282018.jpg/data/jane\u contact\u 07292018.csv
目录和名称

现在我需要遍历
文件中的项目
变量并打印它

我试过:

#!/bin/bash

for i in $files; do
    echo item: $i
done

(1) 首先,将名称列表存储在单个字符串中是一种糟糕的做法。不要这样做——使用数组;这是必要的,因为与常规字符串变量一样,文件名可以包含NUL以外的任何字符,因此无法可靠地知道一个名称何时结束,下一个名称何时开始。(2) 子流程无法访问常规shell变量——只能访问环境变量。如果您需要一段脚本来访问未导出的变量,请将其源代码导入shell,不要将其作为子进程执行。(您可以导出常规字符串变量,但不能导出数组,因此修复不适当地使用字符串存储列表与使用
导出
向子进程公开数据是不兼容的)…无论如何,作为一个完整的问题,您不仅需要显示您的代码,还需要显示您的实际行为和调用方法。在之前的评论中,我已经对上述内容做出了一些有根据的猜测,但除非这些细节被实际写入文本,否则这不是一个完整的问题。(在如何运行脚本的上下文中显示如何设置变量也很重要;我猜这是一个仅存在于父shell中的未导出shell变量,但在问题中显示之前,这只是一个猜测)..您可以尝试在启动脚本的父进程中运行
declare-p files>&2
,然后将
declare-p files>&2
放入脚本本身;差异本身可能会提供信息(如果上述猜测是正确的,那么该变量根本就没有在脚本的运行时环境中设置,您将得到一条反映这一点的错误消息)。