Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 动态构建的参数如何使用/bin/sh正确处理空白?_Variables_Sh_Whitespace_Quoting - Fatal编程技术网

Variables 动态构建的参数如何使用/bin/sh正确处理空白?

Variables 动态构建的参数如何使用/bin/sh正确处理空白?,variables,sh,whitespace,quoting,Variables,Sh,Whitespace,Quoting,我必须使用/bin/sh:( 在下面的示例中,我需要将一个可选的动态构建参数传递给命令openssl: #!/bin/sh function foo() { local dynamic_arg="-passout pass:$1" if [ -z $1 ]; then dynamic_arg="" fi echo ${dynamic_arg} openssl genrsa "${static_arg}" ${dynamic_arg} ... } 如果$1包含空格

我必须使用
/bin/sh
:(

在下面的示例中,我需要将一个可选的动态构建参数传递给命令
openssl

#!/bin/sh

function foo() {
  local dynamic_arg="-passout pass:$1"
  if [ -z $1 ]; then
    dynamic_arg=""
  fi

  echo ${dynamic_arg}
  openssl genrsa "${static_arg}" ${dynamic_arg} ...
}
如果
$1
包含空格,则输出(例如
qw-er
):

问题是,当
$1
包含空格并且不使用引号来使用${dynamic_arg}时,openssl会将我的参数解释为由于空格而产生的更多参数

如果我使用引号来使用
动态参数

openssl genrsa "${static_arg}" "${dynamic_arg}" ...
openssl genrsa "${static_arg}" ${dynamic_arg} ...
然后错误是相同的,因为openssl现在将
dynamic_arg
中的2个参数解释为一个(而不是2个)

如果我在
dynamic_arg
初始化中使用引号(单引号或双引号):

local dynamic_arg="-passout \"pass:$1\""
并且不引用
动态参数的用法:

openssl genrsa "${static_arg}" "${dynamic_arg}" ...
openssl genrsa "${static_arg}" ${dynamic_arg} ...
它仍然会投诉(显示用法)带有值的
动态参数

-passout "pass:qw er"

如何使这个
dynamic_arg
工作并支持其中的空格?

这就是bash>4数组的用武之地

function foo() {
  local -a dynamic_arg
  dynamic_arg=("-passout" "pass:$1") # pass:$1 is enclosed in "
  if [ -z $1 ]; then
    dynamic_arg=()
  fi
  echo "${dynamic_arg[@]}"
  openssl genrsa "${static_arg}" "${dynamic_arg[@]}" ...
  # "${arr[@]}" expands into "${arr[0]}" "${arr[1]}" ... properly enclosed in "
}

不幸的是,我无法使用此解决方案(使用约束更新了问题)。我使用的是
/bin/sh