【问题标题】:How to pass argument to a shell command in shell script from terminal如何从终端将参数传递给shell脚本中的shell命令
【发布时间】:2022-01-23 22:44:40
【问题描述】:

我正在编写一个 shell 脚本 practice.sh。我想将我的第一个参数 $1 从命令行提供给 script.e.g 中的 ls 命令 如果我在终端 $bash practice.sh *.mp3 中运行我的脚本 论据*.mp3 我想用于ls 命令

#!/bin/bash
output=$ls $1

它不起作用 有什么帮助吗?

【问题讨论】:

  • 请将该示例输入的所需输出(无描述、无图像、无链接)添加到您的问题(无评论)。
  • 只是为了帮助您了解程序实际在做什么:由于您从未定义变量ls,因此您的脚本定义了一个名为output的空环境变量,然后运行作为命令提供给脚本的第一个参数。执行$bash practice.sh printenv|grep output时可以看到效果,输出定义为空。

标签: bash shell


【解决方案1】:

你所说的你想要什么的显而易见的答案就是

#!/bin/bash
ls "$1"

它将运行ls,将它(只是)第一个参数传递给脚本。

然而,你也说你想像这样运行:practice.sh *.mp3 运行带有 许多 参数(不仅仅是一个)的脚本——*.mp3 将被扩展为所有当前目录中的 .mp3 文件。为此,您可能想要更多类似的东西

#!/bin/bash
ls "$@"

这会将所有的参数传递给您的脚本(不管有多少)到ls 命令。

这些脚本将只运行ls,其标准输出连接到您的脚本的标准输出连接到的任何内容,因此输出将(很可能)只出现在您的终端上。如果您想捕获 ls 命令的输出(以便您可以用它做其他事情),您需要类似

#!/bin/bash
output=$(ls "$@")

它将使用所有参数运行ls,并在变量$output 中捕获输出。然后,您可以使用该变量执行操作。

【讨论】:

【解决方案2】:

使用shell扩展将命令的输出记录在变量output中:

output=$(ls $1)

这会将命令ls $1 的输出记录在变量output 中。 然后您可以使用echo $output 打印输出。

您可以在GNU Bash reference manual 中阅读有关 shell 扩展的更多信息。

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2022-10-04
    • 1970-01-01
    • 2019-09-29
    相关资源
    最近更新 更多