bash - 如何在bash中使双引号变量输出空而不是两个单引号?
问题描述
例如,我有一个 bash 脚本
[root@test ~]# cat 1.sh
#!/bin/bash
var1=""
var2=""
touch "$var1"
touch $var2
它输出为:
[root@test ~]# bash -x 1.sh
+ var1=
+ var2=
+ touch ''
touch: cannot touch ‘’: No such file or directory
+ touch
touch: missing file operand
所以如果我使用"$var"
over 命令,当它为空时,它将变成''
并破坏我的命令
而如果我$var
不使用双引号,它可以工作,但外壳检查保持投诉双引号以防止分词
我该如何解决这个问题?
- - - - - - -编辑 - - - -
这里是touch
例子,请不要介意这里的命令,目标是让它什么都不输出
例如
my_command $var1 $var2 $var3 $var4
这些 var 可以是空的,所以如果我双引号它
my_command "$var1" "$var2" "$var3" "$var4"
假设如果 var1 和 2 为空,那么它将运行为
var1=""
var2=""
var3="some"
var4="thing"
my_command "$var1" "$var2" "$var3" "$var4"
它输出为
my_command '' '' some thing
,并因''
争论而中断。
如果我做
var1=""
var2=""
var3="some"
var4="thing"
my_command $var1 $var2 $var3 $var4
一切my_command some thing
正常,但外壳检查会不断抱怨:(
解决方案
未引用时,空字符串var=""; touch $var
将扩展为空(就好像您没有添加它一样)。
但是当被引用时var=""; touch "$var"
,它会扩展为空字符串var
,这是一个无效的文件名参数touch
。
推荐阅读
- c# - InvalidOperationException Web 应用程序
- postgresql - 从 HTTP 代理后面通过 TLS/SSL 连接到远程 PostgreSQL 集群
- python - 将小多边形堆叠在另一个更大的多边形中
- docker - 有没有办法制作一个与 curl 或 wget 一起使用的链接文件,以通过 docker hub 私有注册表下载图像?
- r - 无法让 ggplot 生成 geom_line
- django - 无法在 django 中保存表单
- scala - Scala 创建别名类型的实例
- swift - 为什么我必须在类 init() 中将自创数组设为可选,而不是预先存在的变量类型?
- javascript - 将 Avatar(用户个人资料照片)添加到 Semantic UI React 的下拉列表
- amazon-web-services - Kinesis 流身份验证