连接所有参数并用双引号将它们包装起来

rui*_*rui 18 string bash shell concatenation

function foo() {
A=$@...
echo $A
}

foo bla "hello ppl"
Run Code Online (Sandbox Code Playgroud)

我希望输出为:
"bla""hello ppl"

我需要做什么而不是省略号?

gle*_*man 24

@msw有正确的想法(在问题的评论中).但是,使用引号打印参数的另一个想法是:使用隐式迭代printf:

foo() { printf '"%s" ' "$@"; echo ""; }

foo bla "hello ppl"
# => "bla" "hello ppl"
Run Code Online (Sandbox Code Playgroud)

  • 丁!你赢得了大奖.巨型泰迪熊或四英尺啤酒瓶硬币库? (3认同)
  • 呃,我没有提供"简单的一个班轮"吗? (2认同)

Fri*_*ner 6

使用参数替换添加"作为前缀和后缀:

function foo() {
    A=("${@/#/\"}")
    A=("${A[@]/%/\"}")
    echo -e "${A[@]}"
}

foo bla "hello ppl" kkk 'ss ss'
Run Code Online (Sandbox Code Playgroud)

产量

"bla" "hello ppl" "kkk" "ss ss"
Run Code Online (Sandbox Code Playgroud)


nin*_*alj 3

您可以使用“$@”将每个参数视为单独的参数,然后循环每个参数:

function foo() {
for i in "$@"
do
    echo -n \"$i\"" "
done
echo
}

foo bla "hello ppl"
Run Code Online (Sandbox Code Playgroud)