String 减少包含空格的变量的双引号?

String 减少包含空格的变量的双引号?,string,bash,file-io,escaping,String,Bash,File Io,Escaping,我有这样一个脚本: file="results/semester1 (2013).csv" if [ -f "$file" ]; then echo 'File exists.' # do more stuff with $file fi 我想在if块中使用$file做更多的事情,比如issuemv,cp,ln,等等。但是我发现每次我将$file传递给这些Unix命令时,我都必须用双引号将其括起来,以处理文件名中的空格,否则就会出错。正如你在if条件下看到的,我已经做过一次了 有没有

我有这样一个脚本:

file="results/semester1 (2013).csv"
if [ -f "$file" ]; then
  echo 'File exists.'

  # do more stuff with $file
fi
我想在if块中使用
$file
做更多的事情,比如issue
mv
cp
ln
,等等。但是我发现每次我将
$file
传递给这些Unix命令时,我都必须用双引号将其括起来,以处理文件名中的空格,否则就会出错。正如你在if条件下看到的,我已经做过一次了

有没有办法“一劳永逸”地重复引用它,这样我就不必每次都这么做

有没有办法“一劳永逸”地重复引用它,这样我就不必每次都这么做

不可以。对于可能包含空格的变量(特殊情况除外,请参见Mat的答案),您必须在每次使用变量时双引号。这是没有办法的

这是不寻常的,有点烦人,但你很快就会习惯的

有没有办法“一劳永逸”地重复引用它,这样我就不必每次都这么做

不可以。对于可能包含空格的变量(特殊情况除外,请参见Mat的答案),您必须在每次使用变量时双引号。这是没有办法的


这是不寻常的,有点烦人,但您很快就习惯了。

据我所知,不是。您需要在希望将该变量作为单个值处理时引用它

特别是对于测试,可以使用双括号避免引用它。那时不会发生分词。但这并不能节省你打字的时间

if [[ -f $file ]] ; then
  ...
fi

据我所知,没有。只要希望将该变量作为单个值处理,就需要引用该变量

特别是对于测试,可以使用双括号避免引用它。那时不会发生分词。但这并不能节省你打字的时间

if [[ -f $file ]] ; then
  ...
fi

这不是一个非常实用的答案,但请切换到
zsh
。默认情况下,它不会对参数扩展执行分词,因此您可以安全地将它们保留为不带引号的。这不是一个非常实用的答案,但请切换到
zsh
。默认情况下,它不会对参数展开执行单词拆分,因此您可以安全地将它们保留为不带引号的。