【发布时间】:2019-12-09 13:09:36
【问题描述】:
我正在尝试了解如何在 bash 中正确使用花括号和引号。我想知道为什么 ls 命令的第三个示例不起作用。
#!/bin/bash -vx
# File name prefix.
File_name_prefix='this_is_a_file_name_prefix'
# Let's do this in the /tmp directory.
cd /tmp
# Let's make three empty files.
touch ${File_name_prefix}_1.txt
touch ${File_name_prefix}_2.txt
touch ${File_name_prefix}_3.txt
# Let's list the three files.
# This works.
ls "$File_name_prefix"*
# This works.
ls ${File_name_prefix}*
# This does not work.
ls "${File_name_prefix}*"
# This fails.
find ./ -type f -name '${File_name_prefix}*'
# This fails spectacularly.
find ./ -type f -name ${File_name_prefix}*
# But this works.
find ./ -type f -name "${File_name_prefix}*"
echo "Why?"
# Clean up.
rm ${File_name_prefix}*
exit
【问题讨论】:
-
出于调试目的,请将
#!/bin/bash -vx放在脚本的第一行 -
Pathname expansion 不会发生在 double-quotes 中。就这么简单。请注意,它与大括号或
ls无关。 -
bash在那种情况下将双引号变成单引号?
-
@Llewen 不。Bash 从不将任何引号转换为其他引号。什么意思?
-
当我使用 -vx 运行脚本时,它会显示带有单引号的命令,我猜这只是输出。
标签: bash variables double-quotes expansion pathname