在 Linux 上:
$ touch 1 12
没问题,创建1
和12
。
在 SysV 或 HP-UX 11.31 上:
$ touch 1 12
date: bad conversion
我尝试过LANG=C
,同样的错误。为什么?
答案1
这原始touch
命令仅支持将文件的修改时间设置为当前时间。
[YY]MMDDhhmm
历史上的 System V 系统引入了使用语法(可选的年、月、日、小时、分钟)指定时间作为第一个参数的功能。当时,使用破折号和字母后跟可选参数值(如-t …
)的约定尚未完全建立。这造成了与早期版本的不兼容性,使用像您这样的命令 -最初意味着在两个名为和 的touch 1 12
文件上设置时间戳,但从那时起,SysV unices 开始将(或任何完全由数字组成的第一个参数) 解释为时间戳。1
12
1
一些现代 unice,包括 HP-UX,已选择保持与这些 SysV 版本的兼容性。其他版本,包括 *BSD 和最近的 GNU 版本,从未或已经放弃对此语法的支持。
POSIX 的早期版本指定了和,但因为touch TIME FILE…
touch [-t TIME] FILE…
POSIX-2001-t
,仅支持带有该选项的语法。
为了使你的脚本可移植,如果 的第一个参数可以touch
是一个名称完全由数字或数字和点组成的文件,则可以放在--
文件之前(这是 POSIX 推荐的,所以希望它在任何地方都适用)或放在./
文件名的开头:
touch -- 1 12
或者
case "$file" in
/*) :;;
*) file="./$file";;
esac
touch "$file"
答案2
根据此 HP 触摸手册页:http://h20565.www2.hp.com/hpsc/doc/public/display?docId=emr_na-c02273390
...该命令需要以下形式的触摸:
touch time_str file_name
该表格被识别when neither the -r option, the -t option, nor the -- option delimiter is specified, and the first operand consists of all decimal digits.