脚本,将所有$ input保存到1个变量中

fan*_*gio 3 variables bash

例:

bash script.sh "hello world"
Run Code Online (Sandbox Code Playgroud)

(在脚本中echo "$1")

hello world
Run Code Online (Sandbox Code Playgroud)

题:

bash script.sh "good" "morning" "everybody"
Run Code Online (Sandbox Code Playgroud)

我需要在脚本中编写什么才能直接输出:

goodmorningeverybody
Run Code Online (Sandbox Code Playgroud)

因此,在一般情况下,我想$1,$2,$3,...(可能是100,但我不知道)被保存在例如一个变量VAR1.

Eta*_*ner 5

您可以使用$*和引用所有位置参数$@.

3.4.2特殊参数

*

从1开始扩展到位置参数.当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔.也就是说,"$*"相当于"$ 1c $ 2c ...",其中c是IFS变量值的第一个字符.如果未设置IFS,则参数由空格分隔.如果IFS为null,则连接参数时不会插入分隔符.

@

从1开始扩展到位置参数.当扩展发生在双引号内时,每个参数都会扩展为单独的单词.也就是说,"$ @"相当于"$ 1""$ 2".... 如果双引号扩展发生在一个单词中,则第一个参数的扩展与原始单词的开头部分连接,最后一个参数的扩展与原始单词的最后一部分连接.当没有位置参数时,"$ @"和$ @扩展为空(即,它们被删除).

因此,要获得good morning everybody输出,您可以使用echo "$*"echo "$@".

一般来说@,这两个变量更有用.

但是,如果你真的希望所有的世界都像你指明的方式一样,那么你有几个选择.

最直接的是一个简单的循环:

for word; do
    s+=$word
done
Run Code Online (Sandbox Code Playgroud)

(for没有该in <list>部分操作位置参数).

但是,您也可以*通过控制来执行此操作IFS.

所以你也可以这样做s=$(IFS=; echo "$*").您希望/需要子shell以避免IFS为当前shell 设置.