Bash 遍历变量
我有一个名为“files”的变量,其中包含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) 首先,将名称列表存储在单个字符串中是一种糟糕的做法。不要这样做——使用数
/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
放入脚本本身;差异本身可能会提供信息(如果上述猜测是正确的,那么该变量根本就没有在脚本的运行时环境中设置,您将得到一条反映这一点的错误消息)。