bash中变量中字符串和字符串之间的差异

时间:2015-05-08 18:25:19

标签: bash

我在bash中发现了一些奇怪的东西我无法解释。当我使用带引号的字符串(单引号和双引号)的括号表示法初始化数组时,字符串将作为数组的第一个元素放置。当我将字符串放在变量中并且我对变量执行相同操作时,字符串将被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 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")'

究竟发生了什么,两种方法有什么不同?

1 个答案:

答案 0 :(得分:2)

变量中的字符串和字符串之间没有区别。因此,以下两个是相同的:

> 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中,(有时)可以编写一个没有引号的字符串,这是许多其他语言所不允许的。

对未加引号的字符串执行单词拆分,因此它在$test1a string上执行,而不是在引用的版本"$test1""a string"上执行。