Linux 在unix中,是否将带引号的多行字符串作为单个命令行参数传递?

Linux 在unix中,是否将带引号的多行字符串作为单个命令行参数传递?,linux,string,bash,unix,Linux,String,Bash,Unix,我只需要将任何HTML内容作为命令行参数传递,其中包含诸如“,”,`之类的字符。在unix中如何将其作为单个参数传递?如果我正确理解您的要求,您可以从命令行以双引号传递任何内容,即。”“。它将被视为单个参数,并在程序中作为字符串接收,可以根据需要进行分析 这是一个c程序 #include <stdio.h> int main(int c, char *argv[]) { printf("argument is %s\n", argv[1]); ret

我只需要将任何HTML内容作为命令行参数传递,其中包含诸如“,”,`之类的字符。在unix中如何将其作为单个参数传递?

如果我正确理解您的要求,您可以从命令行以双引号传递任何内容,即。”“。它将被视为单个参数,并在程序中作为字符串接收,可以根据需要进行分析

这是一个c程序

#include <stdio.h>

int main(int c, char *argv[])
{
        printf("argument is %s\n", argv[1]);
        return 0;
}
#包括
int main(int c,char*argv[]
{
printf(“参数为%s\n”,argv[1]);
返回0;
}
在控制台上,我编译并使用

$ gcc args.c
$ ./a.out "<img src=\"image.png\" onload='alert(/loaded/)' />"
$gcc args.c
美元/年out“
输出为

争论是

 <img src="image.png" onload='alert(/loaded/)' />


对于参数中的特殊字符,如“”(双引号)、反斜杠\等,只需在这些字符前面加上额外的转义序列\

如果在命令行中键入,可以使用以下技巧:

some_program -some_option some_argument "$(cat)"
any text you like with ` or " or $ or < or whatever
^D

我一直在寻找这个问题的答案,但我在这里看不到答案,所以这里是我最终得到的解决方案 (我没有传递HTML或类似的东西,但类似)

例如,
psql
工具接受可以是多行的命令,但它们需要以双引号字符串传递

我从其他答案开始,建议如下:

CMD=$(cat << EOM
CREATE TABLE mytable
        (
          id bigint NOT NULL,
          sid bigint NOT NULL,
          obs timestamp without time zone NOT NULL,
          rcv timestamp without time zone NOT NULL,
          uid bigint NOT NULL,
          CONSTRAINT pkey PRIMARY KEY (id)
        )
EOM
)

sudo -u postgres psql db -c $CMD
实际上,用双引号将该行包装到一个单行命令中

我希望这对其他人有用。

这对我很有用

下面是一个文件(
setup.json
)中的多行文本,其中包含内部双引号,例如:

{
   "fieldA": "foo"
}
下面是如何将其作为单个参数发送:

setup=$(cat setup.json)
./my_util "$setup"

使用@fayyazkl中的c程序(其他答案)来测试它。

很好!如果我的论点是这样的呢?这个还能用吗?是的。我刚刚通过一个程序进行了验证。将在解决方案中发布它。DoneThere是出现在双引号字符串中时需要转义的许多字符,包括双引号本身。请注意,打印出来的字符串在
image.png
周围没有引号。如果以
/a.out”“
的形式运行,参数中将包含双引号。您必须为程序指定一种解释字符的方法。这里没有特殊的编码。所以我认为没有任何办法。为什么需要换行符呢?还要注意,换行符的处理方式因外壳而异。在csh和csh变体中,换行符是特殊字符,必须转义,而在bourne Shell中,换行符前面的``是可选的。
CMD=$(echo $(cat << EOM
CREATE TABLE mytable
            (
              id bigint NOT NULL,
              sid bigint NOT NULL,
              obs timestamp without time zone NOT NULL,
              rcv timestamp without time zone NOT NULL,
              uid bigint NOT NULL,
              CONSTRAINT pkey PRIMARY KEY (id)
            )
EOM
))

sudo -u postgres psql db -c "$CMD"
{
   "fieldA": "foo"
}
setup=$(cat setup.json)
./my_util "$setup"