【问题标题】:Adding a prefix to all array elements in Bash为 Bash 中的所有数组元素添加前缀
【发布时间】:2018-08-12 01:01:44
【问题描述】:

我将命令行参数存储在一个数组变量中。 (这对我来说是必要的)。 我想在所有数组值前面加上一个通过变量的字符串。

PREFIX="rajiv"

services=$( echo $* | tr -d '/' )

echo  "${services[@]/#/$PREFIX-}"

我得到了这个输出。

> ./script.sh webserver wistudio
rajiv-webserver wistudio

但我期待这个输出。

rajiv-webserver rajiv-wistudio

【问题讨论】:

    标签: arrays linux bash shell


    【解决方案1】:

    您的数组初始化错误。改成这样:

    services=($(echo $* | tr -d '/'))
    

    如果没有外部()services 将变成一个字符串,而参数扩展"${services[@]/#/$PREFIX-}"$PREFIX- 添加到您的字符串中。

    在这种情况下,declare -p 可用于检查变量的内容。在这种情况下,declare -p services 应该会显示:

    declare -a services=([0]="webserver" [1]="wistudio") # it is an array!
    

    而不是

    declare -- services="webserver wistudio"             # it is a plain string
    

    【讨论】:

    • 是的。有效。你能告诉我为什么错了吗?因为 echo "$services[@]" 仍然会给我正确的值
    • 我也想知道如果将其视为一个字符串,那么解决方案将如何工作?在我的另一个脚本中,我必须将附加值传递给一个可执行文件,它只接受字符串。
    • 可能会创建另一个包含详细信息的问题。
    • echo $* 由于分词和通配符扩展,仍然存在许多潜在问题。我建议使用 services=("${@//\//}") 创建数组,因为它几乎可以与参数中的任何内容一起正常工作。
    猜你喜欢
    • 2013-04-15
    • 2013-12-20
    • 1970-01-01
    • 2015-07-29
    • 2019-09-14
    • 2018-12-05
    • 2017-06-17
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多