当前位置: 首页 > 面试题库 >

如何将通配符参数传递给bash文件

伊俊能
2023-03-14
问题内容

我正在尝试编写一个bash脚本,该脚本允许用户使用通配符传递目录路径。

例如,

bash show_files.sh *

在此目录中执行时

drw-r--r--  2 root root  4.0K Sep 18 11:33 dir_a
-rw-r--r--  1 root root   223 Sep 18 11:33 file_b.txt
-rw-rw-r--  1 root root   106 Oct 18 15:48 file_c.sql

将输出:

dir_a
file_b.txt
file_c.sql

现在的样子,它输出:

dir_a

的内容show_files.sh

#!/bin/bash

dirs="$1"

for dir in $dirs
do
    echo $dir
done

问题答案:

父外壳(一个调用)为您bash show_files.sh *扩展了外壳*

在脚本中,您需要使用:

for dir in "$@"
do
    echo "$dir"
done

双引号确保正确处理文件名中的多个空格等。

可能令人困惑的附录

如果您确实确定要扩展该脚本*,则必须确保将*其传递给脚本(如其他答案中所述,用引号引起来),然后确保在正确的位置将其扩展在处理中(这不是小事)。那时,我将使用数组。

names=( $@ )
for file in "${names[@]}"
do
    echo "$file"
done

我经常$@不使用双引号,但这是一次或多或少正确的事情。棘手的是它不能很好地处理带有空格的通配符。

考虑:

$ > "double  space.c"
$ > "double  space.h"
$ echo double\ \ space.?
double  space.c double  space.h
$

很好 但是,请尝试将其作为通配符传递给脚本,并且…好吧,我们只是说那一点变得棘手。

如果要$2单独提取,则可以使用:

names=( $1 )
for file in "${names[@]}"
do
    echo "$file"
done
# ... use $2 ...


 类似资料:
  • 问题内容: 我有一个Linux bash脚本“ myshell”。我希望它读取两个日期作为参数,例如:。我是Java程序员,但不知道如何编写脚本来完成此任务。 脚本的其余部分如下所示: 问题答案: 您在脚本中使用,例如

  • 我有一个通过PHP文件调用的bash脚本。首先,这些文件的内容如下: script.sh php文件 在上面的例子中,通过运行类似于的内容来查找。 但是,当运行PHP文件来获取相同的信息时,我得到了错误。 最终,我想通过一个PHP文件运行一个bash脚本,包括参数。 我花了大部分时间尝试使用这个答案中提出的解决方案,感觉我的PHP文件应该可以工作。 我知道我的脚本和编码肯定很混乱,显然没有工作——

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 问题内容: 我想将登录用户单击的sa 列表中的传递给twitter bootstrap 。我正在与 angularjs* 一起使用 grails ,其中数据是通过 angularjs 呈现的。 *** 组态 我的grails视图页面是 我的是 所以,我怎么能传递到? 问题答案: 我尝试如下。 我在 鼓励 按钮上打电话给angularjs控制器, 我设置的从angularjs控制器。 我提供了一个p

  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用:

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对