以下代码用于在完全位置创建文件。但是运行test.sh abc的结果是
touch:缺少文件操作数
#! /bin/sh
#test.sh
location='~/configuration/'$1
echo $location
touch `$location`
有什么不对吗?谢谢!
答案 0 :(得分:2)
通过将$location
放入反引号中,您尝试执行 $location
的值并将其用作touch
的参数(请参阅{{ 3}},第3.4.5节)只做:
touch $location
如果您使用#!/bin/sh
值运行-x
,您会更清楚地看到bash
在您的shell脚本中正在执行的操作。这是调试脚本的一种非常有用的方法。
答案 1 :(得分:2)
当您将~
放入引号时,它会失去其特殊含义。你需要:
#! /bin/sh
#test.sh
location=~/configuration/"$1"
echo "$location"
touch "$location"
你应该养成一直把变量放在双引号中的习惯(直到你了解不想要引号的特定时间)。
答案 2 :(得分:1)
位置是文件夹还是文件? 如果文件-f如果文件夹-d在下面的脚本--- bash应该理解〜
#! /bin/bash
#test.sh
var1=$1;
location=~/configuration/$var1
echo $location
if [ ! -f $location ]; then
echo "not found touching $location"
touch `$location`
fi
答案 3 :(得分:0)
有几种方法可以做到这一点,但第一个问题是改为
touch `echo $location`
但我觉得做起来可能更简单
touch ~/configuration/$1