Bash技巧:如何在单引号包裹的字符串中输出变量?
解决Bash变量嵌入单引号字符串的问题
如果是直接执行
cp命令,不用纠结单引号,直接用双引号包裹完整路径即可,Bash会自动处理带空格的文件名:cp "/path/to/file/$NEWFILE" /path/to/another/file这种方式最安全,还能处理除了空格之外的其他特殊字符。
如果确实需要生成带单引号包裹路径的命令字符串(比如要保存到变量或脚本里),有两种简单方法:
用双引号包裹整个命令,里面的单引号作为普通字符保留,变量会被正常解析:
cmd="cp '/path/to/file/$NEWFILE' /path/to/another/file" # 查看生成的命令 echo "$cmd"执行后会输出你想要的格式:
cp '/path/to/file/sunny fields.jpg' /path/to/another/file用
printf构造命令,适合更复杂的拼接场景:printf "cp '/path/to/file/%s' /path/to/another/file\n" "$NEWFILE"
你之前尝试的cp "'/path/to/file/$NEWFILE'" /path/to/another/file之所以不行,是因为把带单引号的路径整个用双引号包起来了,这会让cp把单引号当成文件名的一部分,自然找不到对应的文件。
内容的提问来源于stack exchange,提问作者K S M
相关产品推荐
相关产品推荐

