假设我有一个可以接受多个字符串作为输入的函数,例如ls
.
进一步说,我有两个文件夹,其中有空格,例如test 1
和test 2
。
通过调用ls "test 1" "test 2"
ls
将为我列出两个文件夹的内容。
现在假设我要列出的文件夹本身位于一个字符串中,如下所示:folders="\"test 1\" \"test 2\""
。
最后我想ls
用这个变量作为输入参数来调用,我该怎么做?我尝试过ls $folders
返回:
ls: cannot access '"test': No such file or directory
ls: cannot access '1"': No such file or directory
ls: cannot access '"test': No such file or directory
ls: cannot access '2"': No such file or directory
即,它将字符串拆分为单独的参数,即使引号应将它们保持在一起。我有什么选择来解决这个问题?如果更容易使用,则可以在数组中提供参数。
答案1
正如 jesse_b 评论的那样,您需要在此处使用数组。 bashdeclare
命令非常方便:
folders="\"test 1\" \"test 2\"".
declare -a "dirs=($folders)"
declare -p dirs # inspect the variable
输出
declare -a dirs=([0]="test 1" [1]="test 2.")
您可以像这样使用数组(引号至关重要):
ls "${dirs[@]}"