【问题标题】:Allow to pass an argument on second line允许在第二行传递参数
【发布时间】:2015-02-11 15:01:09
【问题描述】:

有什么方法可以让我拥有一个 bash 文件并像这样在第二行传递一个参数

sh -c
git status;
echo "hello world"

真的很丑

sh -c "git status; echo "hello world""

我将 sh 传递给另一个命令,所以我不能这样做:

git status;
echo "hello world"

即使是做这样的事情也不错

echo
"hello world"

基本上我需要一种不终止新行的方法

在这里寻找一种更漂亮的方式将命令传递给xargs https://stackoverflow.com/a/6958957/340688

【问题讨论】:

    标签: bash shell unix arguments


    【解决方案1】:

    简单地引用它。带引号的字符串可以跨越多行。

    sh -c '
    git status
    echo "hello world"'
    

    您可以使用引号的缩进和位置来找出最符合您的审美期望的内容。

    # Does this look nicer?
    sh -c '
      git status
      echo "hello world"
    '
    

    如果您希望进行变量扩展,您可能需要更改双引号和单引号。

    dir=/src/project/
    sh -c "
      cd $dir
      git status
      echo 'hello world'
    "
    

    请注意,如果您想在 -c 参数中进行更复杂的引用(包括单引号和双引号本身),这会变得很混乱。在这种情况下,请考虑使用 Srdjan Grubor 建议的 heredoc 语法。但请注意,它通过标准输入将脚本提供给 shell,而不是作为命令行参数。

    对于您的第二个示例,只需转义换行符。

    echo \
      "hello world"
    

    注意不要在\ 和行尾之间放置任何其他空格(或其他字符,包括 cmets)。

    有些人,包括我,发现如果这些反斜杠都在某个固定列对齐,代码更容易阅读。

    echo                  \
      "hello"             \
      "happy"             \
      "fruit gum"         \
      "world"
    

    您的编辑器可能会帮助您。

    【讨论】:

      【解决方案2】:

      在终端中

      echo \
      "hello world"
      

        sh -c \
          "git status; \
          echo "hello world""
      

      【讨论】:

      • 您的第二个示例将git 视为-cstatus;echo"hello world" 的参数作为附加位置参数。
      【解决方案3】:
      sh << EOF
        git status
        echo "hello world"
      EOF
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-07
        • 2016-08-06
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2015-09-05
        相关资源
        最近更新 更多