问题
I wanted to pass the path name to the script, but my path has spaces (eg. /Users/netto/iTunes \Media/Music/). I have tried putting the actual path directly on the for loop, and I was able to get all the files. Unfortunately, I could not pass it as variable. I have tried both double quote, and single quote. This is what I have currently
$PATH=$1
for f in $PATH; do
echo "Processing file $f "
done
Please let me know on how to do this. Thank you in advance.
回答1:
Spaces in variables are expanded at command level, so to solve the problem you can either put quotation marks around "$1" (so spaces are properly escaped) or use bash arrays.
Here is two example that should work:
#!/bin/bash
DIR="$1"
for f in "$DIR"/*
do
echo "Processing file $f "
done
or using bash arrays:
#!/bin/bash
FILES=("$1"*)
for f in "${FILES[@]}"
do
echo "Processing file $f "
done
来源:https://stackoverflow.com/questions/45301937/loop-through-filenames-with-spaces-within-a-path