如何在将bulitword参数保持在一起的同时在bash中传递完整的参数列表?

Dav*_*ean 10 linux bash

我在bash变量扩展中遇到了一些分词问题.我希望能够在变量中存储一个参数列表并运行它,但任何引用的多字参数都不会评估我对它的期望.

我将用一个例子来解释我的问题.假设我有一个函数decho可以在它自己的行上打印每个位置参数:

#!/bin/bash -u
while [ $# -gt 0 ]; do
  echo $1
  shift
done
Run Code Online (Sandbox Code Playgroud)

好的,如果我去,decho a b "c d"我得到:

[~]$ decho a b "c d"
a
b
c d
Run Code Online (Sandbox Code Playgroud)

这是我期望和想要的.但另一方面,如果我从变量中得到参数列表,我得到这个:

[~]$ args='a b "c d"'
[~]$ decho $args
a
b
"c
d"
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.我可以去:

[~]$ echo decho $args | bash
a
b
c d
Run Code Online (Sandbox Code Playgroud)

但这似乎有点笨重.有没有更好的办法,使扩张$argsdecho $args是字拆分我预想的方式吗?

mou*_*iel 5

您可以使用:

eval decho $args
Run Code Online (Sandbox Code Playgroud)