带引号的文件内容的命令行参数

Mar*_*mon 5 bash shell

我有一个包含命令行参数的文件,我想传递给另一个脚本.

但是这个文件包含诸如的元素"param 1" param2 param3.

让我们用参数test.tmp和脚本文件调用该文件script.sh.

如果我做:

script.sh -p `cat test.tmp` -other_params 1 2 3
Run Code Online (Sandbox Code Playgroud)

script.sh之后接受p:

  1. "param
  2. 1"
  3. param2
  4. param3

但我想:

  1. param 1
  2. param2
  3. param3

任何的想法?

精度小:假设script.sh不可修改.解决方案必须在shell中进行.

Man*_*rbe 6

假设:这种方法需要每行包含一个参数. test.tmp

您可以将xargs与换行符分隔符一起使用:

cat test.tmp | xargs -d '\n' script.sh -p
Run Code Online (Sandbox Code Playgroud)


Nat*_*son 6

您可以将命令包装在eval:

eval "script.sh -p `cat test.tmp` -other_params 1 2 3"

$ cat test.tmp 
"params 1" param2 param3

$ cat script.sh 
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6

$ eval "./script.sh -p `cat test.tmp` other_params 1 2 3"
-p
params 1
param2
param3
other_params
1
Run Code Online (Sandbox Code Playgroud)

  • 好恶.除非你相信`test.tmp`的内容,否则请不要这样做; 如果它包含,例如,`$(rm -rf.)`,那你就是糟糕的一天. (2认同)