bash - 声明不是有效的标识符 bash

标签 bash variables for-loop sed declare

我的 bash 脚本有问题。我所做的就是像这样分配变量。

   for ((i=START;i<=END;i++)
declare var$i=$(something)
done

它确实有效,但现在我遇到了 å、ä、ö 等芬兰语字符的问题。 declare 说的是这样的

bash:declare 'wörd' not a valid identifier

虽然我这样做效果很好

declare var2=$(sömething)

我可以使用 sed 转换字符,但最好像往常一样使用它们,所以这是不得已的解决方案。 所以我想知道如何分配变量,例如

var$i

用芬兰语字符。 这个单词是我的命令“something”输出的一部分。当有两个或更多单词时,只有包含字符 ö 、 ä 等的单词不会分配给变量,因此如果命令的输出是“something wörd”,那么唯一显示的是用 echo 是什么。

最佳答案

bash 根本不允许标识符使用 A-Z、a-z、0-9 和 _ 以外的字符。但是,您描述的错误只是该限制的副作用。 declare 是一个接受字符串参数的命令,看起来 像一个赋值语句,但语义略有不同。考虑这个命令:

foo () {
    echo "something wörd"
}

在赋值语句中,右侧不进行分词,因此您不必引用命令替换。以下工作正常:

$ word3=$(foo)
$ echo "$word"
something wörd

然而,使用 declare 时,命令替换确实经历了分词,所以当你写

$ i=3
$ declare word$i=$(foo)

相当于命令

$ declare word3=something wörd

它为 declare 传递 两个 名称来创建,word3(获取值)和 wörd(这是一个无效的名称)。 declare word3="something wörd" 可以正常工作;当 declare 获取参数时,shell 的分词已经完成。

使用 declare,您需要引用命令替换(或整个字符串),以便将整个输出视为新变量的值。

$ i=3
$ declare "word$i=$(foo)"
$ echo "$word3"
something wörd

关于bash - 声明不是有效的标识符 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289988/

相关文章:

ruby - 在 Xcode 机器人触发器中安装 Pod

bash - 如何在Linux中禁用核心转储

Linux:在 Bash 脚本中读取 readlink/proc/pid/exe 的输出

linux - 如何在bash中的某些字符之间获取2个字符串

java - 从Java中的for循环内部返回的正确方法?

variables - Mod_Rewrite 用于具有多个变量的 URL

c - 外部声明和全局范围

lisp - Clojure 变量和循环

c - C 中 3D 循环的宏

更新步骤后的python for循环?