Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
Linux 从列表/变量中删除项-Bash_Linux_Bash - Fatal编程技术网

Linux 从列表/变量中删除项-Bash

Linux 从列表/变量中删除项-Bash,linux,bash,Linux,Bash,如果我调用变量作为文件列表: 文件=$(ls*.txt) 然后我想删除列表中的第一项(文件) 谢谢 Clive您不应该解析ls的输出;看 幸运的是,在您的情况下,您实际上没有使用ls的任何功能;Bash已经处理了*.txt部分,因此ls是非常冗余的 你可以这样写: # Set files to an array of the files with names ending in '*.txt': files=(*.txt) # Set files to an array consisting

如果我调用变量作为文件列表:

文件=$(ls*.txt)

然后我想删除列表中的第一项(文件)

谢谢


Clive

您不应该解析
ls
的输出;看

幸运的是,在您的情况下,您实际上没有使用
ls
的任何功能;Bash已经处理了
*.txt
部分,因此
ls
是非常冗余的

你可以这样写:

# Set files to an array of the files with names ending in '*.txt':
files=(*.txt)

# Set files to an array consisting of ${files[1]}, ${files[2]}, ...:
files=("${files[@]:1}")

(请参阅;搜索
${parameter:offset}

请参阅:和一些其他有用的提示。。。。[[1.要删除最后一个:
rm${files[@]:(-1)}
][[2.要删除一个范围
rm${files[@]:1:3}
]],请注意后者会删除第二个、第三个和第四个匹配项。同样对于非常旧的BASH版本,调用数组最后一个元素的
-1
也不起作用files=(*.txt)'在我发出'echo$files'时,只给我一个文件'1stFile.txt'。然后,当我发出“rm”${files[0]}”然后发出“echo$files”时,剩下的是同一个文件。我很困惑。事实上,“files=(*.txt)”在我发出“echo$files”时会留下“*.txt”。上面是我发出'files=$(ls*.txt)时发生的情况。它不工作。哇,实际发生的是我通过发出这些命令删除了我的文件-WTF@用户3329732:Eep,对不起。这就是
rm
(“remove”)命令所做的,也是我认为您想要做的。(我不是100%确定,这就是为什么我在代码注释中提到它会删除文件,但如果不是您的意思,那么考虑到数据丢失的风险,我真的应该更明确地说明我的不确定性。对不起。:-/)