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

 灸灵侯嗒黍_147 发布于 2023-02-08 16:31

我有一个程序,它需要一些命令行参数.

它的执行方式如下:

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

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

#!/bin/bash

node server.js ARGUMENTS GIVEN FROM COMMAND LINE

这该怎么做?

我想将相同的参数传递给命令(不知道它们有多少和它们将是什么).

有办法吗?

1 个回答
  • $@在双引号中使用变量:

    #!/bin/bash
    
    node server.js "$@"
    

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

    当扩展发生在双引号内时,每个参数都会扩展为单独的单词.也就是说,"$ @"相当于"$ 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.在"非上市"的情况下处理它的3个参数:a,bc.你会有不满意的用户.

    2023-02-08 16:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有