字符串作为输入参数

字符串作为输入参数

假设我有一个可以接受多个字符串作为输入的函数,例如ls.

进一步说,我有两个文件夹,其中有空格,例如test 1test 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[@]}"

相关内容