关于shell脚本变量设定的问题
发布网友
发布时间:2022-04-25 13:17
我来回答
共2个回答
热心网友
时间:2024-10-20 08:57
#!/bin/bash
#来自DZ动力(verydz.com),代码第二行改为如下试下
a="+ - * /"
set -f
追问按照你说的 成功了, 请问set -f 是什么意思
追答set
功能说明:设置shell。
语 法:set [+-abCdefhHklmnpPtuvx]
补充说明:set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。
参 数:
-a 标示已修改的变量,以供输出至环境变量。
-b 使被中止的后台程序立刻回报执行状态。
-C 转向所产生的文件无法覆盖已存在的文件。
-d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e 若指令传回值不等于0,则立即退出shell。
-f 取消使用通配符。
-h 自动记录函数的所在位置。
-H Shell 可利用"!"加的方式来执行history中记录的指令。
-k 指令所给的参数都会被视为此指令的环境变量。
-l 记录for循环的变量名称。
-m 使用监视模式。
-n 只读取指令,而不实际执行。
-p 启动优先顺序模式。
-P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t 执行完随后的指令,即退出shell。
-u 当执行时使用到未定义过的变量,则显示错误信息。
-v 显示shell所读取的输入值。
-x 执行指令后,会先显示该指令及所下的参数。
+ 取消某个set曾启动的参数。
热心网友
时间:2024-10-20 08:58
我觉得呢,echo只有加-e选项了才允许后面的输出进行转义,试试下面这样呢?
echo -e 1"$i"2"$j"3"$x"4"$y"5 = $[$var]
此外,还可以试试用单引号(会屏蔽其中特殊字符的特殊含义,仅解释为字符本身,应该就不需要转义了):
a='+ - * /'追问应该和 echo转义没有关系, 这句不改只改上面 就能得到正确结果
而且echo的转义应该是转义 \n \t 这类分隔符
追答实践了一下,发现使用了变量a,传递的是 \* ;而直接传递的话,传递的是 *。区别就是这个。
而bash里$[$var]这种计算方式,跟$((var))这种计算方式类似,*是被允许的,而 \* 则会报错。
用调试方式运行脚本 sh -x script.sh 可以看到这个区别。
具体为什么,还真不好解释,取决于shell的解释方式。
通过变量a来传递的话只能在运算前手动转换一下:
[ "$i" = "\*" ] && i='*'
[ "$j" = "\*" ] && j='*'
[ "$x" = "\*" ] && x='*'
[ "$y" = "\*" ] && y='*'
--------------------------------------
set -f
Disable pathname expansion
可以避免通配符*被展开为文件路径。我的确没想到这个。
在命令行可以试试用set -f前后ls *命令的结果有何不同。
Shell中的变量和环境变量
Shell脚本中的变量是存储数据的基本载体,用于在后续命令中引用和操作。定义变量时,需在变量名前加$符号,并使用等号(=)来赋值,确保等号两边无空格。举例:变量的定义与使用 当在Shell脚本中引用变量时,通过$符号引用其值。例如,`$variable`将输出变量的值。特殊变量则用于获取脚本信息或命令行参数,...
shell如何定义变量
在Shell中,还有一些特殊的变量,如环境变量,它们对于进程和脚本间的通信至关重要。可以使用`export`命令将变量导出为环境变量,使其在子进程和脚本中可用。例如:bash export MY_ENV_VARIABLE="This is an environment variable"这样定义的变量可以在其他脚本或子进程中通过环境变量访问到。这对于配置和跨...
shell的变量类型有以下哪几种?
Shell之环境变量、局部变量环境变量又被称为全局变量,可以在创建的shell以及任意子进程shell中使用。局部变量只能在创建的shell脚本中使用。环境变量用于定义Shell的运行环境,保证Shell命令的正确执行,Shell通过环境变量来确定登录的用户名、登录目录等。比如要运行的程序是test.shtest.sh123ab上边的123ab传递...
如何在shell脚本中使用变量
1、linux shell中的变量一般定义格式为:var=value。其中var是变量名称,=是赋值,value是给变量赋的值。比如下面的变量定义。a=12; b="hello world"2、注意变量名称的第一个字符不可以是数字,但是可以是下划线。如下示例则为非法的变量名。3、要使用变量的值,在变量前面加上$符号即可。比如下面的...
shell脚本中可以设置全局变量么
如果只想看指定的变量设置,如路径PATH的设置,可以用 "echo $PATH"或 “ env | grep PATH"或” env | grep -i path"来查询。前面的适合知道全名的,后面2种适合只知道部分字段或者部分关键字母(甚至不确定字符大小写)的。-bash-3.00# echo $PATH /usr/sbin:/usr/bin:.-bash-3.00# env...
如何在shell脚本中设置环境变量
如果只想看指定的变量设置,如路径PATH的设置,可以用 "echo $PATH"或 “ env | grep PATH"或” env | grep -i path"来查询。前面的适合知道全名的,后面2种适合只知道部分字段或者部分关键字母(甚至不确定字符大小写)的。-bash-3.00# echo $PATH /usr/sbin:/usr/bin:.-bash-3.00# env...
如何通过shell脚本设置全局的环境变量
如果只想看指定的变量设置,如路径PATH的设置,可以用 "echo $PATH"或 “ env | grep PATH"或” env | grep -i path"来查询。前面的适合知道全名的,后面2种适合只知道部分字段或者部分关键字母(甚至不确定字符大小写)的。-bash-3.00# echo $PATH /usr/sbin:/usr/bin:.-bash-3.00# env...
shell脚本中可以设置全局变量么?
a的值在新建shell中被改写。你这里 ls 的结果只有一条,所以while循环只执行一次就退出了,从新建shell回到原shell,a的新值不会被带出来,还是"hehe"。用输入重定向来替换管道符就行了,例如可以这样:a="hehe"while read linedo a="wuwu" echo "$a"done <`ls -ltr`echo "$a"
shell脚本变量的定义与赋值
定义变量 Shell 支持以下三种定义变量的方式:variable=value variable='value'variable="value"variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有...
Linux shell变量的用法
注意索引从0或1开始,方法三需空格,方法五从1开始。使用字符串处理功能解决需求问题。完整脚本需求:变量string="Bigdata process framework is Hadoop,Hadoop is an open source project"。执行后,打印输出并提供用户功能选择。将功能模块划分为函数,实现所需功能。程序主流程设计,实现脚本功能。示例1...