linux - 如何使用存储在单个变量中的引号传递命令行参数?

标签 linux bash shell

我想从 shell 脚本调用外部应用程序,但是这个 shell 脚本在单个变量中获取参数(从其他脚本)。一切正常,直到我不必为单个参数使用双引号,而是用空格分隔单词。

这是我的问题的简化示例(sh_param 只打印所有传递的参数):

#!/bin/sh

pass() {
    echo "Result with \$@"
    ./sh_param $@
    echo "Result with \"\$@\""
    ./sh_param "$@"
    echo "Result with \$*"
    ./sh_param $*
    echo "Result with \"\$*\""
    ./sh_param "$*"
}

pass '"single param" separate params'

和结果(sh_param 只打印所有传递的参数):

Result with $@
Param: "single
Param: param"
Param: separate
Param: params
Result with "$@"
Param: "single param" separate params
Result with $*
Param: "single
Param: param"
Param: separate
Param: params
Result with "$*"
Param: "single param" separate params

我想要:

Param: single param
Param: separate
Param: params

最佳答案

脚本

pass() {
  echo 'Result with "$@"'
  sh_param "$@"
}

sh_param() {
  for i in "$@"
  do
    echo Param: $i
  done
}

pass "single param" separate param

结果

Result with "$@"
Param: single param
Param: separate
Param: param

关于linux - 如何使用存储在单个变量中的引号传递命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10449233/

相关文章:

linux - Bash:意外标记 `then' 附近的语法错误

linux - Shell 脚本 - 两个 for 循环和更改文件扩展名

linux - 如何以编程方式运行多个 screen ,每个 screen 都使用一个命令?

regex 和 sed 命令匹配相对路径文件名

macos - 使用 Vagrant 获取 shell 脚本问题和失败

android - 行缓冲发生在哪里?在哪个流上?

linux - boost 和自动配置

c - 使用c编程在nano linux中进行Ping 6程序

linux - 将裁剪标记添加到 A3 PDF 的命令行方法

linux - 庆典错误 : 2: integer expression expected