有没有办法让${VAR}
展开,好像是用双引号引用的?
这不是我想看到的:
% A="some spaces in there"
% touch ${A}
% ls -1
in
some
spaces
there
当然,我可以使用像"$VAR"
这样的典型符号。但是在引用文本等中使用引号时这很麻烦。我想知道是否有一种扩展$ {...}符号的方法可以将${...}
视为"${...}"
,而不是使用双引号本身?
答案 0 :(得分:3)
不关注accepted best practice(并了解shell 真正的工作原理)很可能会咬你。反复。随着僵尸病毒感染的f牙。一些可以帮助的事情:
只要起始和结束引号彼此相邻,您就可以对单个参数的不同部分使用不同的引号:
$ printf '%q\n' "foo 'bar' baz"'nuu "boo" zoo'
foo\ \'bar\'\ baznuu\ \"boo\"\ zoo
您可以在子shell中设置IFS
以避免搞砸整个脚本:
$ a="some spaces in there"
$ (IFS= && touch ${a})
$ ls -1
some spaces in there
答案 1 :(得分:1)
您可以设置IFS variable 在shell拆分变量时忽略空格。当获取可能在循环中包含空格的输入时,这也很有用。
$ cat /tmp/t.sh
IFS="$(printf '\n\t')"
A="some spaces in there"
touch ${A}
ls -l
$ /tmp/t.sh
some spaces in there
(如果在你的字符串中有像*这样的字符,请尝试使用set -f来禁用globbing(请参阅帮助集),感谢@glenn jackman。但实际上,在文件名中加上*会有问题!)
原作:
$ cat /tmp/t.sh
#!/bin/bash
A="some spaces in there"
touch ${A}
ls -1
$ /tmp/t.sh
in
some
spaces
there
$