bash中变量中字符串和字符串之间的差异
我在bash中发现了一些奇怪的东西,我无法解释。当我使用带引号的字符串(single和double)的括号表示法初始化数组时,该字符串将作为数组的第一个元素。当我将字符串放入变量中并对变量执行相同操作时,字符串被IFS正确分隔bash中变量中字符串和字符串之间的差异,bash,Bash,我在bash中发现了一些奇怪的东西,我无法解释。当我使用带引号的字符串(single和double)的括号表示法初始化数组时,该字符串将作为数组的第一个元素。当我将字符串放入变量中并对变量执行相同操作时,字符串被IFS正确分隔 #/bin/bash test1="hello my name is mr nobody" array1=($test1) test2='hello my name is mr nobody' array2=($test2) array3=("Hello my name
#/bin/bash
test1="hello my name is mr nobody"
array1=($test1)
test2='hello my name is mr nobody'
array2=($test2)
array3=("Hello my name is mr nobody")
array4=('Hello my name is mr nobody')
declare -p array1
declare -p array2
declare -p array3
declare -p array4
输出:
declare -a array1='([0]="hello" [1]="my" [2]="name" [3]="is" [4]="mr" [5]="nobody")'
declare -a array2='([0]="hello" [1]="my" [2]="name" [3]="is" [4]="mr" [5]="nobody")'
declare -a array3='([0]="Hello my name is mr nobody")'
declare -a array4='([0]="Hello my name is mr nobody")'
究竟发生了什么,这两种方法有什么不同?字符串和变量中的字符串没有区别。因此,以下两项是相同的:
> test1="hello my name is mr nobody"
> array1=($test1)
> array2=(hello my name is mr nobody)
以下两项也是如此:
> test2="hello my name is mr nobody"
> array3=("$test2")
> array4=("hello my name is mr nobody")
字符串不“记住”其部分或全部字符已被引用。引号完全是语法性的,由bash解释器解释(一次)
这与其他语言没有明显区别:在C或Python中,字符串“abc”有三个字符,而不是五个;引号仅用于指示文字是字符串。然而,在bash中,可以(有时)编写不带引号的字符串,这是许多其他语言所不允许的
分词是在不带引号的字符串上执行的,因此它是在
$test1
和字符串上执行的,而不是在带引号的版本上执行的“$test1”
和“字符串”您没有引用该字符串。使用array1=(“$test1”)
谢谢。我觉得那些没有引号的字符串把我弄糊涂了。