linux - 将命令行参数传递给 bash 中的另一个命令

标签 linux node.js bash

我有一个程序需要一些命令行参数。

它是这样执行的:

user@home $ node server.js SOME ARGUMENTS -p PORT -t THEME OTHER STUFF

现在我想为它制作一个可执行的启动器:

#!/bin/bash

node server.js ARGUMENTS GIVEN FROM COMMAND LINE

如何做到这一点?

我想将相同的参数传递给命令(不知道它们的数量和内容)。

有办法吗?

最佳答案

在双引号中使用 $@ 变量:

#!/bin/bash

node server.js "$@"

这将提供在命令行上传递的所有参数并保护可能出现在其中的空格。如果不使用引号,传递给脚本的参数如 "foo bar"(即字符串值中有空格的单个参数)将传递给 node 作为两个参数。来自documentation :

When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ….

根据其他答案,编辑添加:我完全不明白您为什么要使用 $* 。执行以下脚本:

#!/bin/bash

echo "Quoted:"
for arg in "$*"; do
    echo $arg
done

echo "Unquoted:"
for arg in $*; do
    echo $arg
done

使用以下内容(假设您的文件保存为 script 并且可执行):

$ script "a b" c

你会得到:

Quoted:
a b c
Unquoted:
a
b
c

您的用户打算传递两个参数:a bc。 “引用”案例将其作为一个 参数处理:a b c。 “Unquoted”案例将其作为 3 个参数处理:abc。您会有不满意的用户。

关于linux - 将命令行参数传递给 bash 中的另一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731398/

相关文章:

node.js - NodeJs : convert array of objects to a big object

linux - 使用shell脚本重命名文件

macos - 使 bash 脚本显示系统事件对话框,然后获取其结果并在 if 语句中使用它

c++ - 使用 ffmpeg 从图像创建视频时为每个帧添加水印

linux - 限制对 git 服务器目录的访问?

javascript - 在 ReactJS 上显示图像

javascript - mongoose 查找多个条件的记录并检查请求参数是否不为空

c++ - 在socket编程的select()中重新启动定时器

android - 在 Android 上使用 Runtime.getRuntime().exec() 执行 "stat"时出现 IOException?

Bash 增量破坏脚本