为什么这个循环一次不处理一个文件?

lau*_*ent 3 bash shell-script wildcards

我有一个包含各种文件的目录:

main.js
SomeClass.js
View.jsx
Run Code Online (Sandbox Code Playgroud)

我想遍历所有 .jsx 文件。所以我写了这个 Bash 脚本:

for JSX_FILE in "$BUILD_DIR/*.jsx"; do   
    echo $JSX_FILE
    echo "PATH: $JSX_FILE"
    JSX_FILENAME=$(basename "$JSX_FILE")
    echo "NAME: $JSX_FILENAME"
done
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,会打印出这个:

/path/to/View.jsx

路径:/path/to/*.jsx

名称:*.jsx

所以我不明白为什么在一种情况下它具有$JSX_FILEvalue/path/to/View.jsx而在另一种情况下它具有 value /path/to/*.jsx。我怎样才能确保这个变量在循环中的任何地方都具有相同的值?

Ign*_*ams 16

引用 glob 会抑制 globbing。

for JSX_FILE in "$BUILD_DIR"/*.jsx; do   
Run Code Online (Sandbox Code Playgroud)

  • 具体来说,星号被原封不动地传递到循环中,然后它只在 shell 运行 echo 命令时扩展。 (4认同)