允许在第二行传递参数

时间:2014-12-12 20:16:57

标签: bash shell unix arguments

我有没有办法让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

3 个答案:

答案 0 :(得分:1)

sh << EOF
  git status
  echo "hello world"
EOF

答案 1 :(得分:1)

在终端

echo \
"hello world"

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

答案 2 :(得分: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"

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

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

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

您的编辑可能会帮助您解决此问题。