eval and $()/``and typeset and xargs

原创 2013年12月04日 11:18:49

不加-l 。则仅仅是文件名,可以直接删除 ls -tr|head -3
$ ls -ltr|head -3 |xargs grep total --------------------------the same with above rm
grep: can't open total
grep: can't open 907848
grep: can't open drwxrwsr-x

 在非email*.txt 的文件中,查找<>
在除了email*.txt 的文件中,查找<>。
ls |grep -v email |xargs grep "<>"

a="ls |more"
$ ret=$(a)
ksh: a:  not found
$ ret=`$a`
|more: No such file or directory
$ ret=`ls|more`
$ echo $ret
eval $a-----既不仅替代变量而且替换完执行命令。将a用ls|more替换,又执行了ls|more的命令。而$(a)错误,因为$(),和``只执行命令,不能替换,展开string。在执行命令。

Normally ksh cannot handle a variable name that included an embedded variable:

Mypart=1   # OK, no problem because the variable name is fixed as “Mypart”.


My${var}=1  # ksh error, it doesn‘t know how to handle My${var}.

My usual solution to this problem is to use ‘eval’ which tells ksh to expand the line before executing it:

eval My${var}=1   # OK, ${var} gets expanded first, so ksh executes “Mypart=1”.

Someone on the China COOL team discovered that typeset will also cause the variable to be expanded first.  So instead of using “eval” you could do:

typeset My${var}=1  # OK just like eval

Because eval or typeset will expand the line first, you have to be careful if you don’t want \$ to be expanded too soon.  For example:

print “variable=$My${var}”   # no good, ksh prints the value of variable $My followed by variable ${var} instead of printing the value of $Mypart.

eval print “variable=$My${var}”  # no good, ksh expands $My (blank most likely) before printing

eval print “variable=\$My${var}”  # correct, the eval does not expand the first $ because it has a backslash.  The expanded command is ‘print variable=$Mypart’.  Note that the double quotes were lost too.  If the print was formatted with extra white space, you would need to backslash the double-quotes too.

shell typeset命令的使用

[保留] typeset的常见用法http://www.chinaunix.net 作者:寂寞烈火  发表于:2007-12-16 09:50:34【发表评论】【查看原文】【Shell讨论区】【关闭】...
  • zhao8899
  • zhao8899
  • 2010年03月10日 22:50
  • 7458

Shell 系列之 declare 与 typeset

目录结构:命令用途 常用命令参数 使用示例命令用途declare 与 typeset 命令是bash的内建命令,两者是完全一样的,用来声明shell变量,设置变量的属性。常用命令参数 -r 设置变量...
  • u012327100
  • u012327100
  • 2016年09月04日 16:04
  • 2985


  • K346K346
  • K346K346
  • 2017年03月10日 21:28
  • 1542


用途说明 常用参数 格式:declare 格式:typeset 格式:declare -p 格式:typeset -p 显示所有变量的值。   格式:declare -p var 格...
  • bluewhale1
  • bluewhale1
  • 2012年06月26日 13:46
  • 769


1,无选项的执行typeset,则显示所有变量 /home/lee#typeset typeset COLORS typeset -x COLORTERM typeset -x DISPLAY...
  • yyr2008
  • yyr2008
  • 2013年12月19日 10:23
  • 345

shell 中typeset 的用法

typeset用于设置变量属性,如大小写,宽度,左右对齐等都可以用typeset来控制, 当用typeset改变一个变量的属性时,这种改变是永久的,下面以ksh为例,演示typeset的几种典型用法 ...
  • blackmanren
  • blackmanren
  • 2013年07月09日 14:08
  • 791


1、declare(typeset)在shell中,内建(builtin)命令declare与typeset用法相同,格式如下:declare [-aAfFgilnrtux] [-p] [name[=...
  • iEearth
  • iEearth
  • 2016年09月22日 18:20
  • 3363

关于xargs cp中,如何确定拷贝的源和目的 (copied)

来源: http://bbs.chinaunix.net/thread-1022095-1-1.html Seker: find . -name "*" |xargs cp ??...
  • u012474286
  • u012474286
  • 2014年03月27日 09:11
  • 5574

高级Bash脚本编程指南(12):指定变量的类型: 使用declare或者typeset

高级Bash脚本编程指南(12):指定变量的类型: 使用declare或者typeset 成于坚持,败于止步 declare或者typeset内建命令(这两个命令是完全一样的)允许指定变量的具体类...
  • xinyuwuxian
  • xinyuwuxian
  • 2013年05月08日 19:59
  • 1448


xargs - build and execute command lines from standard input xargs通常和xargs一起使用,能够解决许多问题~ 在使用find命令的...
  • zhuying_linux
  • zhuying_linux
  • 2011年11月14日 16:18
  • 3336
您举报文章:eval and $()/``and typeset and xargs